1. bean对象创建
Spring默认是单例(singleton)
可以指定scope属性设置为多例
<bean id="User" class="demo1.User" scope="prototype"/>
注意:
scope="singleton" 在启动(容器初始化之前),就已经创建了bean,且只 有一个。
scope="prototype" 只有在用到对象的时候,才创建对象。
如果设置scope="singleton" 以单例模式创建对象,并且想要延迟创建对象可以 设置lazy-init属性
注意:
lazy-init="true" 延迟初始化,只有用到对象才初始化,并且只创建一个。
lazy-init="false" 默认为false,不延迟创建,即在容器启动之前就创建。
lazy-init属性只对单例(singleton)设置有效!
2. bean对象初始化/销毁
设置init-method属性和destory-method属性
init-method="init_user" 对应对象的init_user()方法,在对象创建之后执行。
destory-method="destory_user" 对应对象的destory_user()方法,在对象销 毁的时候执行。注意容器必须用实现类。
3. 对象依赖关系
对象属性赋值
⑴.通过构造函数
使用<constructor-arg></constructor-arg>标签
A) 按类型匹配
B) 按索引匹配
C) 引用匹配
⑵.通过set方法给属性注入值
A)<property name="" value=""></property>
B)<property name="" ref=""></property>
⑶.P名称空间给对象的属性注入值
为了简化属性的注入,使用p名称空间代替set方法的属性注入。
<bean id="User" class="demo1.User" p:name="王五" p:age="20"/>
⑷.自动装配 autowire=”byName”||”byType” 区分大小写,自动去容器中查找跟 属性名称一样的对象,也就是说id和属性名称一样。
也可以定义到全局,这样就不用每个bean节点都去写autowire=”byName”
还可以根据类型自动装配,注意如果根据类型自动装配,必须保证容器中只有 一个该类型的对象,否则会报错。
总结:Spring提供的自动装配主要是为了简化配置,但是不利于后期的维护。
⑸.注解
使用注解开发步骤:
⑴.引入context名称空间
⑵.开启注解扫描
注解处理对象之间的关系:
假设一个老师对应一个学生
在Student类中:
在Teacher类中