@lookup注解的使用

背景,如果有一个类C,需要用到类B,如果使用@Autowired注解注入B,那么B每次调用都是同一个对象,即使B不是单例的,现在我希望每次调用B都是不一样的,那么实现方案有2个:

方案A : 每次从容器中获取B:

@Component
@Scope(scopeName= ConfigurableBeanFactory.SCOPE_PROTOTYPE) //原型 也就是非单例
public class B {
    public  void sayHi(){
        System.out.println("hi");
    }
}
@Component
public  class C implements ApplicationContextAware {
    private ApplicationContext applicationContext;
    public void hello(){
        B b = (B)applicationContext.getBean("b");
        b.sayHi();
    }


    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext=applicationContext;
    }
}

方案B: 使用@lookup注解:

@Component
@Scope(scopeName= ConfigurableBeanFactory.SCOPE_PROTOTYPE) //原型 也就是非单例
public class B {
    public  void sayHi(){
        System.out.println("hi");
    }
}

@Component
public abstract class C {

    public void hello(){
        B b = getB();
        b.sayHi();
    }

    @Lookup
    public abstract B getB(); //一般都是抽象方法
}

 

posted @ 2020-08-03 18:55  yangxiaohui227  阅读(2310)  评论(0编辑  收藏  举报