Bean配置
# Bean配置
属性:
- name - 别名,除了id外还允许其他命名,property标签中ref也支持name
- scope - 生成模式,默认情况是单例
- 可选值:
- singleton: 单例
- prototype: 多例
- 可选值:
# Bean实例化
先前我们通过class
和id
属性能够将类的实例化托管给IoC,对象其实是通过无参构造器实例化的。经过测试得知,无参构造器无论是public还是private,都能够成功实例化,private也能实例化,这说明了底层是通过反射机制实现的。内部实例化时,必须为类提供无参构造器,否则会出现BeanCreationException
错误
# 静态工厂
早期为了解决业务层与数据层的耦合,开发者还会用到工厂模式,那么Spring的IoC如何管理静态工厂模式所生成的对象呢?
首先需要创建一个工厂类,假设是StaticFactory.class
,然后写一个静态的方法返回一个新创建的类
public class StaticFactory {
public static UserDao getUserDao(){
return new UserDaoImpl();
}
}
1
2
3
4
5
2
3
4
5
之后在applicationContext.xml
设置类的路径
<bean id="userDao" class="com.project.factory.StaticFactory" factory-method="getUserDao"></bean>
# 生命周期
- init-method: 初始化
- destroy-method: 销毁
以上两个配置都是在<bean>
标签下的,假设你有一个UserDaoImpl类用于实例化。
public class UserDaoImpl implements UserDao {
public void init(){
System.out.println("init!!!");
}
public void destroy(){
System.out.println("destroy!!!");
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
当然你可以决定任意方法名,这不受限制。在设置完对应方法后,你可以在applicationContext.xml
中绑定这些方法
<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.project.dao.impl.UserDaoImpl" init-method="init" destroy-method="destroy"></bean>
</beans>
1
2
3
4
5
6
2
3
4
5
6