java项目中:
1.建User类
public class User {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("setusername-----"+name);
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}[code="java"][/code]
2.建二个接口,和实现类
public class TestSpringImpl implements TestSpring{
private User user;
public void setUser(User user){
this.user = user;
this.user.setName("TestSpringImpl---testUser");
}
public void save(String name){
// System.out.println("TestSpringImpl---"+name);
System.out.println(this.user.getName());
}
}
public class SecondTestImpl implements SecondTest {
private User us;
public void setUs(User us){
this.us = us;
this.us.setName("SecondTestImpl--testUser");
}
public void del(User user){
//System.out.println("SecondTestImpl--User="+user.getName());
System.out.println(this.us.getName());
}
}
3.application.xml
<bean id="testSpringImpl" class="TestSpringImpl">
<property name="user" ref="user">
</property>
</bean>
<bean id="secondTestImpl" class="SecondTestImpl">
<property name="us" ref="user"></property>
</bean>
<bean name="user" class="User" scope="prototype"/>
<bean id="test" class="Test">
<!-- //setter 注入
<property name="ts" ref="testSpringImpl"></property>-->
<constructor-arg ref="testSpringImpl"></constructor-arg>
<constructor-arg value="i LOEVE YOUE"></constructor-arg>
<constructor-arg ref="secondTestImpl"></constructor-arg>
</bean>
当user类的,scope 为singleton
TestSpringImpl 修改了user的 name 为TestSpringImpl---testUser
SecondTestImpl 也修改了user的 name 为SecondTestImpl--testUser
save 和 del 输出的 user的 name 都是 SecondTestImpl--testUser
当user类的,scope 为prototype 时.
输出的分别是TestSpringImpl---testUser,SecondTestImpl--testUser
springAPI:
当把一个bean定义设置为singlton作用域时,Spring IoC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例。默认
Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。
对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责:容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。(让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用bean的后置处理器,该处理器持有要被清除的bean的引用。)
1.建User类
public class User {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("setusername-----"+name);
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}[code="java"][/code]
2.建二个接口,和实现类
public class TestSpringImpl implements TestSpring{
private User user;
public void setUser(User user){
this.user = user;
this.user.setName("TestSpringImpl---testUser");
}
public void save(String name){
// System.out.println("TestSpringImpl---"+name);
System.out.println(this.user.getName());
}
}
public class SecondTestImpl implements SecondTest {
private User us;
public void setUs(User us){
this.us = us;
this.us.setName("SecondTestImpl--testUser");
}
public void del(User user){
//System.out.println("SecondTestImpl--User="+user.getName());
System.out.println(this.us.getName());
}
}
3.application.xml
<bean id="testSpringImpl" class="TestSpringImpl">
<property name="user" ref="user">
</property>
</bean>
<bean id="secondTestImpl" class="SecondTestImpl">
<property name="us" ref="user"></property>
</bean>
<bean name="user" class="User" scope="prototype"/>
<bean id="test" class="Test">
<!-- //setter 注入
<property name="ts" ref="testSpringImpl"></property>-->
<constructor-arg ref="testSpringImpl"></constructor-arg>
<constructor-arg value="i LOEVE YOUE"></constructor-arg>
<constructor-arg ref="secondTestImpl"></constructor-arg>
</bean>
当user类的,scope 为singleton
TestSpringImpl 修改了user的 name 为TestSpringImpl---testUser
SecondTestImpl 也修改了user的 name 为SecondTestImpl--testUser
save 和 del 输出的 user的 name 都是 SecondTestImpl--testUser
当user类的,scope 为prototype 时.
输出的分别是TestSpringImpl---testUser,SecondTestImpl--testUser
springAPI:
当把一个bean定义设置为singlton作用域时,Spring IoC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例。默认
Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。
对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责:容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。(让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用bean的后置处理器,该处理器持有要被清除的bean的引用。)