@Service
public class ServiceA {
public void print(String msg) {
System.out.println(msg);
}
public void test(String msg) {
testBean(msg).print();
}
@Lookup
protected TestBean testBean(String msg) {
return new TestBean(msg);
}
}
我们有时候会遇到某个Spring中的单例Bean用到原型Bean,例如上面的test方法每次调用都需要一个新的TestBean。
我们可以使用BeanFactory的getBean方法来达到每次获取不一样的原型Bean。 也可以通过@Lookup来获取,@Lookup的原理也是BeanFactory的getBean实现的。
为什么不直接new一个TestBean,因为我需要IOC容器为TestBean注入其他的单例Bean
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class TestBean {
@Autowired
private ServiceA serviceA;
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public void print() {
serviceA.print(msg);
}
public TestBean(String msg) {
super();
this.msg = msg;
}
}
总之,我觉得很好用