下面介绍如何使用Bean范围化来控制Bean的创建工作
1:Bean范围化
这一部分内容在先前的文章中已经说明了。不再累述~~
2:利用工厂方法来创建Bean
很多时候,在Spring应用上下文中配置Bean都可以通过调用类的构造函数来创建。但是如果想通过静态厂方法,使用第三方API来展现某些类型,该如何做?
考虑在Spring中配置单例类的情况。单例类只是确保通过静态厂方法只创建一个实例。
Java代码如下:Stage单例类
public class Stage{
private Stage()
{
}
private static class StageSingLetonHolder{
static Stage instance=new Stage();
}
public static Stage getInstance()
{
return StageSingLetonHolder.instance;
}
}
Stage被作为单例类来实现,确保没有其他方法可以创建Stage的多个实例。注意:Stage没有一个公共的构造函数,静态的getInstance方法每次在调用时都返回相同的实例。在Spring中如何不使用构造函数来配置Stage为Bean呢?
<bean>元素有一个factory-method属性,允许指定要使用的静态方法,而不是使用构造函数来创建类的实例。配置如下:
<bean id="theStage"
class="com.xx.xx.xxx.Stage"
fatcory-method="getInstance"/>
3.初始化和销毁Bean
要定义建立和销毁Bean,只需要使用init-method和destory-method参数来声明<bean>
init-method属性指定了在Bean初始化时要调用的方法。
destory-method属性指定了将Bean从容器中删除时要调用的方法。
配置如下:
<bean id="a"
class="xx.xxx.xxx.xx"
init-method="方法名"
destory-method=“方法名”>
<prpperty name="" value=""/>
</bean>
如果一个上下文定义文件中有多个Bean都使用相同的方法来初始化或销毁,则可以如下配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
default-init-method="方法名"
default-destory-method="方法名"/>
..........
</beans>
InitializaingBean和DisposableBean
作为init-method和destory-method的备选,我们可以重写类来实现两个特定的Spring接口:InitializaingBean和DisposableBean。其中InitializaingBean接口需要实现afterPropertiesSet()方法,它用来执行Bean的初始化。DisposableBean接口需要实现destory()方法。这种方法的好处是无需额外的配置。缺点是使得Bean与Spring API相互耦合,所以不建议使用~~~