Spring中Bean的作用域

2009.01.27 / 标签: ,,, / 分类: J2EE技术
Sofa

在Spring的标签中有一scope属性,用于指定创建出的实例的作用域。在默认情况下该值为singleton,也就是同一个实体对象在内存中始终都只存在一个。另一个值为prototype,当然,不用说其意与前一个恰恰相反。

在Java中“==”使用于判断两个对象所指的内存地址是否相等的,所以写段简单的代码即可查看两种作用域的效果。

public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
MyBean bean1 = (MyBean) factory.getBean("myBean");
MyBean bean2 = (MyBean) factory.getBean("myBean");
if(bean1 == bean2){
System.out.println("sigleton");
}else{
System.out.println("prototype");
}
}

不指定scope运行一下看看,然后将scope改为prototype看看吧。

Spring公共属性注入

2009.01.26 / 标签: ,, / 分类: J2EE技术
Sofa

假设现在有两个实体类,它们的属性如下图所示。现在只有两个,我们可以很轻易的进行注入配置。可是,倘若项目中的实体类很多呢?那岂不又得在配置上花费大量时间了?有没有什么好办法减少编写配置文件呢?
首先来分析一下这两个类,他们两个都有相同的属性id和name。为了避免重复性的编写这些属性配置,可以这么来做:
在applicationContext.xml文件中使用标签将两个类的相同属性抽取出来配置到abstractBean中,与其他Bean所不同的是不需要配置class属性,而需要设置它的abstract属性为true。

<bean id="abstractBean" abstract="true" >
<property name="id" value="1"/>
<property name="name" value="neeke"/>
</bean>

接下来,配置Bean1。class属性指定为实体类Bean1,指定它的parent为abstractBean。这就意味着Bean1继承了abstractBean,也就是说Bean1拥有了abstractBean的所有属性了。所以,接下来仅仅需要配置email即可。

<bean id="bean1" class="cn.ineeke.spring.Bean1" parent="abstractBean">
<property name="email" value="neeke@ineeke.com"/>
</bean>

同理对Bean2进行配置。完整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-2.5.xsd">
<bean id="abstractBean" abstract="true" >
<property name="id" value="1"/>
<property name="name" value="neeke"/>
</bean>
<bean id="bean1" class="cn.ineeke.spring.Bean1" parent="abstractBean">
<property name="email" value="neeke@ineeke.com"/>
</bean>
<bean id="bean2" class="cn.ineeke.spring.Bean2" parent="abstractBean">
<property name="password" value="123456"/>
</bean>
</beans>

无觅相关文章插件,快速提升流量