@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(); //一般都是抽象方法
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM