1、spring是一个IOC容易,可以实例化一个具体的bean,可以动态的对bean属性进行装配。
2、支持aop
注入类型:
1、setter
2、构造方法(不常用)
3、接口注入(不常用)
构造方法注入:
在类中,实现一个构造方法,然后将需要的参数传入进去:
private UserDao dao;
getDao()/setDao()
public UserService(UserDao dao) {
super();
this.dao = dao;
}
<bean id="userService">
<constructor-arg>
<ref bean="dao">
</constructor-arg>
</bean>
id vs name
id和name是一样的,不一样的是name中可以添加特殊字符。
简单属性注入:
在java类里面有属性,然后在spring的定义bean的地方,在bean里面定义子标签,写<property value="">可以注入该值
bean的生存范围:
scope的意思是范围,默认是singleton,每次取对象都是同一个,
如果是prototype(是原型的意思),每次取都是按照原型实例化一个,所以不是同一个,配置action的时候用prototype,因为struts推荐的就是prototype
集合注入:
<bean id="moreComplexObject" class="example.ComplexObject"> <!-- results in a setAdminEmails(java.util.Properties) call --> <property name="adminEmails"> <props> <prop key="administrator">administrator@example.org</prop> <prop key="support">support@example.org</prop> <prop key="development">development@example.org</prop> </props> </property> <!-- results in a setSomeList(java.util.List) call --> <property name="someList"> <list> <value>a list element followed by a reference</value> <ref bean="myDataSource" /> </list> </property> <!-- results in a setSomeMap(java.util.Map) call --> <property name="someMap"> <map> <entry key="an entry" value="just some string"/> <entry key ="a ref" value-ref="myDataSource"/> </map> </property> <!-- results in a setSomeSet(java.util.Set) call --> <property name="someSet"> <set> <value>just some string</value> <ref bean="myDataSource" /> </set> </property> </bean>
使用时定义集合,然后get/set,就会自动注入到name 里面。(properties就是一个map,实现了map接口)
在spring.xml文件的头部增加default-autowire="",在下面bean的地方增加属性autowire就是引用头部的default-autowire的值
生命周期:
lazy-init:bean在容器初始化的时候bean不被初始化,什么时候用到了才会初始化
init-method和destroy-method:类在初始化的时候有init方法,结束了有destroy方法,可以在<bean>里面写<bean init-method="init" destroy-method="destroy"/>
容器在初始化会调用init方法,在销毁的时候调用destroy方法
如果bean被调用两次,并且bean的scope是prototype,则会调用两次init,不会调用destroy,需要监控销毁