bean配置:
1 基础配置:id bean唯一标识,class bean对应的java类
<bean id="XXX" class="XXX.XXX"/>
2 别名配置:通过添加name字段指定别名,别名可以指定多个,多个别名之前可用逗号、分号或者空格隔开
<bean id="XXX" name="别名" class="XXX.XXX"/>
3 作用范围配置:通过添加scopep字段指定bean对应的类创建的是单例对象,还是可以创建无数个对象,默认是单例
¤ singleton 单例
¤ protopyte 非单例
<bean id="XXX" class="XXX.XXX" scope="singleton"/>
¤ 适合让容器管理的bean
♦ 表现层对象
♦ 业务层对象
♦ 数据层对象
♦ 工具对象
¤ 不适合让容器管理的bean
♦ 封装实体的域对象
bean实例化:
1 使用对象的无参构造方法:不管方法是private还是public,IoC容器都能正常调用。使用正常bean配置 注:常用
<bean id="AAA" class="com.AAA"/>
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
AAA aaa = (AAA)ctx.getBean("aaa");
2 使用静态工厂:bean配置需要修改 注:此方法早期使用比较多
public class AAAFactory
{
public static AAA getAAA()
{
return new AAAObj();
}
}
<bean id="AAA" class="com.xxxFactory" factory-method="getXXX"/> 注:factory-method对应工厂类里获取对应对象的方法名
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
AAA aaa = (AAA)ctx.getBean("aaa");
3 使用实例工厂:bean配置需要修改。先实例化工厂,再调用工厂创建对象方法
public class AAAFactory
{
public AAA getAAA()
{
return new AAAObj();
}
}
<bean id="factory" class="com.xxxFactory"/>
<bean id="AAA" factory-method="getXXX" factory-bean="factory"/>
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
AAA aaa = (AAA)ctx.getBean("aaa");
4 使用factoryBean方式实例化。对第三种方式的改良。 注:实用
public class AAAFactoryBean implements FactoryBean<AAA>
{
public AAA getObject() throws Exception
{
return new AAAObj();
}
public Class<?> getObjectType()
{
return AAA.class;
}
public boolean isSingleton()
{
return false;
}
}
<bean id="AAA" class="com.AAAFactoryBean"/>
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
AAA aaa = (AAA)ctx.getBean("aaa");
bean生命周期:控制生命周期的两种方式
1 通过配置实现
¤ 在类里面添加一个初始化方法。例如:public void init(){} 添加一个销毁方法。例如:public void destory(){}
¤ 在bean配置里添加对应属性
<bean id="AAA" class="com.AAA" init-method="init" destory-method="destory"/>
2 通过接口实现
¤ 类继承InitializingBean接口,实现接口的afterPropertiesSet方法
¤ 类继承DisposableBean接口,实现接口的destory方法
3 测试时销毁调用方式。真实项目销毁由框架处理
¤ 修改容器对象 此种方式一般不会用
♦ ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
♦ 然后可以调用ctx.close();
¤ 注册事件。此种方式不需要调用close方法
♦ ctx.registerShutdownHook();
浙公网安备 33010602011771号