log4j是真正实现日志功能的产品,同类产品很多 slf4j 是一个适配器,当我们的系统换了一个日志源后,不需要更改代码
(1)Spring是什么? Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架 》full-stack Service Dao web 》轻量级 按需添加模块 》开源 可以获取源代码 以 IOC- (Inverse Of Control:反转控制)和 AOP- (Aspect Oriented Programming:面向切面编程)为内核 (2)有什么特点? 提供了展现层 SpringMVC 持久层 Spring JDBC 还能整合开源世界众多著名的第三方框架和类库 业务层事务管理 AOP 方便解耦,简化开发 IOC Java源码是经典学习范例 逐渐成为使用最多的 Java EE 企业应用开源框架
(1)Test :用于测试使用 (2)Core container:核心容器,就是用于装Java Bean对象 (3)AOP:切面编程 (4)Aspects:提供了与AspectJ的集成 (5)Data access:数据访问。用于访问操作我们的数据库。支持持久层的操作。jdbcTemplate mybatis (6)Web:用于支持数据展示层,支持http请求 (7)Transactions:用于支持事物处理。用于解决业务层的事物处理问题。 编程式事务管理和声明式事务管理
(1)什么是IOC 控制反转- (Inversion of Control,缩写为IoC) 》把原来new对象的这种方式转换成了,spring通过反射创建对象的方式 》spring创建完的对象放到一个容器中,谁需要就给谁注入进去- (获取对象并赋值给引用) 简单说:把创建对象和管理对象的权利交给spring
(1)方法区别
context.getBean("id值", 类型.class);//无需转型 context.getBean("id值");//需转型(2)bean标签的属性 id:bean标签的识别ID,理论上可以随便写 class:你要上Spring给你创建哪个类的对象,需要写上该类的全路径名 赋值的方式有两个
Person person1 = new Person(); //设置方法 person1.setId(1); System.out.println(person1); //构造方法赋值 Person person2 = new Person(1,"jack",20,new Date()); System.out.println(person2);name:成员变量的名字 value:成员变量的值 一个property标签最后会调一个对应的set方法
<bean id="person2" class="com.hx.domain.Person" > <property name="id" value="10"/> <property name="name" value="rose"/> <property name="age" value="20"/> </bean>配置构造方法的参数的 constructor-arg 如果有四个,就表示调的一个四个参数的构造方法。 value可以赋上基本类型数据与String,但是其他对象,要使用ref 表示在当前容器中查找一个已存在的对象
(1)什么是静态工厂 XxxFactory.get(); (2)通过调用静态方法获取bean对象
public class PersonFactory { public static Person getBean() { return new Person();//静态方法返回创建的对象 } }(3)factory-method 指定获取对象的静态工厂的方法
<!-- Person person1 = PersonFactory.getBean();--> <bean class="com.hx.demo02.PersonFactory" factory-method="getBean" id="person4"/>(1)什么是实例工厂 XxxFactory (2)通过工厂对象调用成员方法获得bean对象 XxxFactory factory = new XxxFactory(); //实例化工厂对象 factory .yyy() //获得对象 (3)factory-bean 创建工厂对象 (4)factory-method 调用方法获得bean对象
<!-- PersonFactory2 factory2 = new PersonFactory2(); 创建工厂--> <!-- Person person1 = factory2.getBean();调用工厂的方法--> <bean class="com.hx.demo03.PersonFactory2" id="factory2"/> <bean factory-bean="factory2" factory-method="getBean"id="person5"/>》单例是什么? 内存中只有一个对象,每次获取到该对象的地址值一样. 》多实例是什么? 内存中的每个对象都是一个新的对象,他们的地址值都不同.
(1)问题: 每次获取对象的时候,spring是新创建一个对象还是始终给我们返回同一个对象. (2)答案: spring默认的情况下创建的对象都是单例的. (每次返回的对象都是同一个)
scope="singleton" 单例(默认值) scope="prototype" 多例 scope="request" 创建的对象放到request域中 scope="session" 创建对象放到session对象(1)生命周期 创建方法init 销毁方法destory 普通方法service (2)属性 init-method 当该对象初始化的时候该方法会自动执行 destroy-method 当该对象即将销毁的时候会自动调用该方法 (3)测试 context.close()关闭容器
(1)什么是依赖注入 DI (dependency injection) 依赖注入 含义:就是给对象的属性设置值. 就是给对象的属性设置值 set方法给对象设置值 构造方法给对象初始化的时候设置值. (2)property标签 set方式设置属性(掌握) 让spring调set方法,前提条件类中必须有set方法
name : 代表的是set方法去掉set,首字母小写setName Name name value: 基本类型或字符串类型的值,具体给属性设置用的 ref (引用) : 引用对象的id,作为一个对象类型注入
(1)注入是什么? 就是查找之后,进行赋值 (2)三种注入方式 》1 *** @Autowired 或者 @Autowired和@Qualifier(“bean的id”)搭配 》2 @Value("#{bean的id}") 》3 @Resource(name=“bean的id值”)
@Service public class PersonService { //private PersonDao personDao = new PersonDao(); //第一种:@Autowired或者 @Autowired和@Qualifier("bean的id")搭配 //第二种:@Value("#{bean的id}") //第三种:@Resource(name="bean的id值") @Autowired PersonDao personDao ; }