我们都知道,spring 的Bean默认是单例的,当在不同的地方获取这个Bean的时候都是同一个。
但是如果我们指定了"prototype"原型模式呢。
结果是两个变量在不同的方法中使用的时候还是同一个
@Component
public class LA {
@Autowired
LB lb;
public void printlnInfo(){
System.out.println("lb-["+ lb +"]");
}
public void printlnInfo1(){
System.out.println("lb-["+ lb +"]");
}
}
@Component
@Scope("prototype")
public class LB {
}
@Test
public void LookupModel(){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.spring.lookup");
context.refresh();
LA la = context.getBean(LA.class);
la.printlnInfo();
la.printlnInfo1();
}
//打印结果
lb-[com.spring.lookup.LB@184cf7cf]
lb-[com.spring.lookup.LB@184cf7cf]
@lookup注释,就是我们每次获取对象的时候,都从容器中取出一个新的对象。
@Component
public abstract class LC {
public void printInfo(){
LB lb = createLb();
System.out.println("lb-["+ lb +"]");
}
public void printInfo1(){
LB lb = createLb();
System.out.println("lb-["+ lb +"]");
}
@Lookup
public abstract LB createLb();
}
@Test
public void LookupModel(){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.spring.lookup");
context.refresh();
LC lc = context.getBean(LC.class);
lc.printInfo();
lc.printInfo1();
}
//打印结果
lb-[com.spring.lookup.LB@3427b02d]
lb-[com.spring.lookup.LB@647e447]