@Lookup注解使用示例

1,458 阅读1分钟
@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;
    }
}

总之,我觉得很好用