1. 使用XML装配bean
Xml是最常见的spring应用系统配置源。
几种spring容器都支持使用xml装配bean,包括:
XmlBeanFactory
ClassPathXmlApplicationContext
XmlWebApplicationContext
① 基本语法为:
<beans>
<bean id="" scope="" class=""></bean>
<bean id="" scope="" class=""></bean>
</beans>
② Scope选项
<bean scope=”singleton” id="userService" class="com.service.UserService"/>
singleton:单例 默认值
prototype:原型(每次获取bean时创建新的对象)
request:一次请求有效(java web开发)
session:session级有效(java web开发)
global-session:在web中spring容器ApplicationContext一致。
③ 初始化与销毁
有两种方法:
1.在配置文件中配置:
<beans>
<bean id="" scope="" class="" init-method="init" destory-method="destory"></bean>
</beans>
这样在装载此bean对象之后会立马执行init函数,销毁时会执行destory函数。
2.在类中使用注解:
不需要在配置中配置,直接在init方法前面添加注解:
@PostConstruct
public void init(){
}
@PreDestory
public void destory(){
}
④ 通过set方法注入依赖
即可以通过在配置中添加property属性,使用反射机制,就会调用类相应的set方法将值注入进去,可以是值也可以是集合类,甚至是其他的bean。
<bean id="userService" class="com.service.UserService">
<property name="name">
<value>张三</value>
</property>
<property name="address">
<list>
<value>北京</value>
<value>上海</value>
</list>
</property>
<property name="name" ref="另一个bean的名字"/>
</bean>
集合可以是string[],list,set,map等等。
如果是list<对象>,则配置时:
<list>
<ref bean="对象对应的bean的id"/>
<ref bean="对象对应的bean的id"/>
</list>
如果是set<对象>,则配置时:
<set>
<ref bean="对象对应的bean的id"/>
<ref bean="对象对应的bean的id"/>
</set>
如果是map<string,对象>,则配置时:
<map>
<entry key="字串" value-ref="对象对应的bean的id"/>
<entry key="字串" value-ref="对象对应的bean的id"/>
</map>
⑤ 继承
<bean id="userService" parent="另一个bean的id" class="com.service.UserService">
</bean>
添加一个parent属性,初始化数据时会先调用父类的方法。
⑥ 通过构造函数注入
<bean id="userService" class="com.service.UserService">
<constructor-arg index="0" type="java.lang.String"value="张三"/>
<constructor-arg index="1" type="int"value="25"/>
</bean>
⑦ 自动装配bean的属性值
有5种方式:
Master类有个成员变量,Dog m_dog;
因为没有配name为m_dog的propety,因此通过autowire去beans中去找,如果是byType,则找到类型一样的就装载进去,如果是byName则找bean的id为m_dog的对象进行装载。
注:当一个接口有多个实现类时,使用注解装载bean时会报错,需要使用Qualifier强行指定使用哪个实现类,如:
@Resource
@Qualifier("userServiceBean")
private IUserService userService;