Spring中三种实例化bean的方法:
1)使用类构造器
<bean id="orderService" class="cn.itcast.OrderService"/>
2)使用静态工厂方法实现实例化
<bean id="personService" class="cn.itacast.OrderFactory" factory-method="createOrder"/>
public class OrderFactory{
public static OrderServiceBean createOrder(){
return new OrderServiceBean();
}
}
3)使用实例工厂方法实例化
<bean id="personServiceFactory" class="cn.itcast.service.OrderFactory"/>
<bean id="personService" factory-bean="personServiceFactory" factory-method="createOrder"/>
public class OrderFactory{
public static OrderServiceBean createOrder(){
return new OrderServiceBean();
}
}
Bean的作用域:
.singleton
在每一个Spring Ioc容器中一个bean定义只有一个对象实例。默认情况下会在容器启动的时候初始化
bean。但是我们可以指定Bean节点的lazy-init="true"来延迟初始化bean,这时候只有第一次使用
bean的时候才会初始化bean。如:
<bean id="xxx" class="类的全类名" lazy-init="true"/>
如果想对所有bean都应用延迟初始化,可以在根节点beans设置defult-lazy-init="true",如下:
<beans default-lazy-init="true"...>
.prototype
每次从容器获取的bean都是新的对象。
.request
.session
.global session
注入依赖对象
1)基本类型对象注入
<bean id="orderService" class="OrderServiceBean">
<constructor-arg index="0" type="java.lang.String" value="xxx"/> //构造器注入
<property name="name" value="zhao"/> //属相setter方法注入
</bean>
2)注入其他bean
方法1:
<bean id="orderDao" class="service.OrderDaoBean"/>
<bean id="orderService" class="service.OrderServiceBean">
<property name="orderDao" ref="orderDao"/>
</bean>
方法2:使用内部bean(内部bean不能被其他bean使用)
<bean id="orderService" class="service.OrderServiceBean">
<property name="orderDao">
<bean class="service.OrderDaoBean"/>
</property>
</bean>
集合装配类型:
public class OrderServiceBean {
private Set<String> sets=new HashSet<String>();
private List<String> lists=new ArrayList<String>();
private Properties properties=new Properties();
private Map<String,String> maps=new HashMap<String,String>();
//setter和getter方法省略
.....
}
集合的配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="order" class="cn.itcast.service.OrderServiceBean">
<property name="lists">
<list>
<value>hujingwei</value>
<value>wanglei</value>
</list>
</property>
<property name="sets">
<set>
<value>set</value>
</set>
</property>
<property name="maps">
<map>
<entry key="hujingwei" value="26" />
<entry key="wanglei" value="25" />
</map>
</property>
<property name="properties">
<props>
<prop key="12">sss</prop>
</props>
</property>
</bean>
</beans>
自动装配
在java代码中,使用@Autowired或@Resource注解方式进行装配,这两个注解的区别是:
@Autowired默认是按类型装配,@Resource默认是按名称装配,当找不到名称匹配的时候
才按照类型装配。
@Autowired注解是按照装配类型进行装配的,默认情况下,依赖的对象必须存在,如果
允许为null值,可以设置它的required属性为false。如果我们想按照名称装配,可以
结合@Qualifier注解一起使用。如下:
@Autowired
@Qualifier("personOrderBean")
private PersonDao personDao;