名词定义:
bean标签class属性指向的bean统一用currBean表示。
bean标签其他属性指向的bean统一用referBean表示。
基本数据类型 = 基本类型 + 包装类型 + String。
=== beans ===
default-lazy-init
flase【默认】
true:全局延迟加载
=== bean ===
id
name
从效果来说等同于id,区别:
class
Bean的全限定类名
lazy-init
true:延迟加载(即用到的时候才创建并初始化Bean)
false:即时加载(即在创建容器时就创建并初始化Bean)
scope
singleton【默认】:每次获取同一个对象
prototype:每次都是获取新对象
request:
session:
global-session:
application:
init-method
Bean创建后调用的初始化方法(可以是private static)
destroy-method
factory-bean
定义创建currBean的bean的工厂方法所在的referBean
factory-method
定义创建currBean的工厂方法。该方法必须是非静态无参方法。
Spring可以从工厂方法返回类型推测出currBean的类型,因此可以不用定义currBean的class属性。
depends-on
表明currBean依赖于referBean。这样在创建currBean时会先创建referBean。
注意:如果referBean设置了延迟加载,而currBean没有设置,那么延时加载会失效。
可以这么理解:延迟加载是在第一次使用referBean时才创建,而referBean就是在创建currBean时第一次使用。
可以定义多个,用逗号、空格、分号分隔。
=== constructor-arg ===
注入依赖 - 构造方法注入
写在bean标签里面,每个构造方法的参数对应一个constructor-arg标签
index
表明这是构造方法的第几个参数
name
currBean的构造方法的参数名
ref
需要注入的Bean的id
=== property ===
注入依赖 - 属性注入
name
currBean的成员变量名,通过调用该变量的setter方法注入依赖。
value
需要赋给该变量的值(该变量必须是非引用类型)
ref
需要注入的referBean的id(该变量一般是引用类型)
例如:
<bean class="Address" id="addr"></bean>
<bean class="User">
<property name="address" ref="addr"/>
</bean>
注意:
如果有constructor-arg与property标签同时修改一个成员变量,
那么先执行constructor-arg的依赖注入,再执行property的依赖注入。
总之,property会覆盖constructor-arg的依赖注入。
说明:以下四个标签是集合属性的赋值标签。
如果集合元素类型为基本数据类型,标签的type属性可省略。
=== list ===
给类型为List及其子类的属性赋值。
如果类型就是List,默认使用ArrayList来实现。
<list>
<value>s1</value>
<value>s2</value>
</list>
<list value-type="com.spring.bean.User">
<ref bean="user1"/>
<ref bean="user2"/>
</list>
=== set ===
给类型为Set及其子类的属性赋值。
<set>
<value>s1</value>
<value>s2</value>
</set>
<set value-type="com.spring.bean.User">
<ref bean="user1"/>
<ref bean="user2"/>
</set>
== map ==
给类型为Map及其子类的属性赋值。
<map>
<entry key="1" value-ref="user1"/>
<entry key="2" value-ref="user2"/>
</map>
=== props ===
Properties类型,键值为String类型的,所以直接写值。
<props>
<prop key="1">s1</prop>
<prop key="2">s2</prop>
</props>
作用是向Spring容器注册以下四个BeanPostProcessor:
1. AutowiredAnnotationBeanPostProcessor(使用@Autowired时需要)
2. CommonAnnotationBeanPostProcessor(使用@Resource时需要)
3. PersistenceAnnotationBeanPostProcessor(使用@PersistenceContext时需要)
4. RequiredAnnotationBeanPostProcessor(使用@Required时需要)
作用是自动扫描指定包名下所有标记有@Component,@Service,
@Repository,@Controller的类作为Bean。
注:由于<context:component-scan base-package=”xx.xx”/>也包含了
自动注入上述四个BeanPostProcessor的功能,所以<context:annotation-config/>
可以省略。如果两者都进行了配置,则只有前者有效。