Spring最核心的两种技术IOC和AOP
IOC(控制反转)是指让容器管理对象的生命周期和对象之间关系的维护,而这里的容器指的就是Spring。
在Spring中,实现IOC思想的方式就是DI(依赖注入),通过配置文件来管理对象的生命周期和对象与对象之间的关系,在XML文件中定义对象,容器通过
反射机制创建对象,注入关系
Spring的三种依赖注入方式:
1.设值注入/属性注入(通过set方法注入)
属性注入即通过 setXXX() 方法注入 Bean 的属性值或依赖对象,属性注入是实际应用中最常采用的注入方式,
属性注入要求 Bean 提供一个默认的构造函数,并为需要注入的属性提供对应的 set 方法, spring 先调用
Bean 的默认构造函数实例化 Bean 对象,然后通过反射的方式调用 set 方法注改入属性值,比如:
public class User {
private String name;
public void setName(String name) {
this.name = name;
}
public void getName() {
return name;
}
}
设值注入配置:
<bean id="user" class="com.xxx.User">
<property name="name" value="zhangsan" />
</bean>
2.构造注入(通过构造函数注入)
public class User {
private String name;
private String phone;
public User(String name) {
this.name = name;
}
...
}
构造注入配置:
<bean id="user" class="com.xxx.User">
<constructor-arg value="zhangsan" />
</bean>
3.工厂方法注入(现在比较少用)
--------------------------------------------------------------
引入其他Bean的方式
public Class Employee {
private User user;
public void setUser(User user) {
this.user = user;
}
...
}
Employee 的 Bean 通过 <ref> 元素引用 user Bean ,建立起 employee 对 user 的依赖:
配置方式:
<bean id="user" class="com.xxx.user"/>
<bean id="emp" class="com.xxx.Employee">
<property name="user" ref bean="user"/>
</bean>
Bean的作用域:
1.singleton 容器中只有一个Bean
2.prototype 每次请求都会创建一个新的Bean
3.request
4.session
5.global session
默认作用域为sinleton
Spring的事物类型/传播行为(7个)
1.PROPAGATION_REQUIRED 支持当前事物,如果当前没有事物,就新建一个事物。这是最常见的选择。required英文的意思为必须的
2.PROPAGATION_SUPPORTS 支持当前事物,如果当前没有事物,就以非事物方式执行
3.PROPAGATION_MANDATORY 支持当前事物,如果当前没有事物,就抛出异常 mandatory的英文意思为强制的,命令的
4.PROPAGATION_REQUIRES_NEW 新建事物,如果当前存在事物,将当前事物挂起 require的英文意思为要求
5.PROPAGATION_NOT_SUPPORTED 以非事物方式执行操作,如果当前存在事物,就将当前事物挂起
6.PROPAGATION_NEVER 以非事物方式执行,如果当前存在事物,则抛出异常
7.PROPAGATION_NESTED 如果当前存在事物,则运行在一个嵌套的事物中。如果当前没有事物,就和1.PROPAGATION_REQUIRED操作类似。
它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效。nested的意思为嵌套的