如果我们定义了一个单例对象,但是单例对象内部引用了一个多列对象,每次调用单例对象的方法时候,里面的那个多列对象是否每次都是不一样的?
我们代码验证下:
package com.amarsoft.code.spring.pojo;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;
@Component
@Scope("prototype")
public class Cat {
int age;
public Cat() {
System.err.println("Cat初始化成功");
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.amarsoft.code.spring.pojo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Lookup;
import org.springframework.stereotype.Component;
@Component
public class CatTest {
@Autowired
Cat cat;
//@Lookup
public Cat getCat() {
return cat;
}
public CatTest(){
}
public void test(){
System.out.println(getCat());
}
}
结果:
调用了2次方法,获取到里面那个多列对象的地址相同
其实解决方法2种:
- 每次返回都直接new新的对象
- 利用spring框架的@Lookup注解
我改造注入方式
@Component
public class CatTest {
@Autowired
Cat cat;
@Lookup
public Cat getCat() {
return cat;
}
public CatTest(){
}
public void test(){
System.out.println(getCat());
}
}
结果:
这一次调用2次方法,获取的对象地址是不同的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)