@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(); //一般都是抽象方法 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步