如何使用spring @Lookup批注?

我需要从单例中获取原型类。我发现方法注入是可行的方法,但是我真的不知道如何使用spring @Lookup注释。

我是依赖注入的新手,我选择了注释配置,所以我想朝着这个方向继续。

我发现@Lookup注释是最近才添加的(https://spring.io/blog/2014/09/04/spring-framework-4-1-ga-is-here),但是我找不到任何方法用它。

所以,这是简化的例子

配置类:

@Configuration

@Lazy

public class ApplicationConfiguration implements ApplicationConfigurationInterface {

@Bean

public MyClass1 myClass1() {

return new ContentHolderTabPaneController();

}

@Bean

@Scope("prototype")

public MyClass2 myClass2() {

return new SidebarQuickMenuController();

}

}

这是课程示例:

public class MyClass1 {

doSomething() {

myClass2();

}

//I want this method to return MyClass2 prototype

public MyClass2 myClass2(){

}

}

我该如何使用@Lookup注释?

回答:

@Lookuppublic MyClass2 myClass2()方法应用注释之前,请在@Lookup的Javadoc中阅读以下内容:

容器将通过CGLIB生成该方法的包含类的运行时子类,这就是为什么这种查找方法只能在容器通过常规构造函数实例化的bean上起作用的原因(即,查找方法无法替换从工厂方法返回的bean,而我们无法这样做)动态为其提供子类)。

因此,从以下代码中删除以下工厂方法样式Bean声明ApplicationConfiguration:

  @Bean

public MyClass1 myClass1() {

return new ContentHolderTabPaneController();

}

并添加@Component注释,以使Spring实例化bean(还将@Lookup注释添加到方法中):

@Component

public class MyClass1 {

doSomething() {

myClass2();

}

//I want this method to return MyClass2 prototype

@Lookup

public MyClass2 myClass2(){

return null; // This implementation will be overridden by dynamically generated subclass

}

}

现在,使myClass1bean脱离上下文,并且它的myClass2方法应该每次都被替换/重写以获取新的原型bean。

更新:

Using factory method declaration

实现带@Lookup注释的方法(“查找方法”)并不难。在没有@Lookup使你的配置类保持不变的情况下,现在MyClass1看起来像(实际上,如果@Lookup使用了Spring,则会在子类中生成类似的实现):

public class MyClass1 {

doSomething() {

myClass2();

}

//I want this method to return MyClass2 prototype

@Autowired

private ApplicationContext applicationContext;

public MyClass2 myClass2() {

return applicationContext.getBean(MyClass2.class);

}

}

Spring ApplicationContext为你注入。

以上是 如何使用spring @Lookup批注? 的全部内容, 来源链接: utcz.com/qa/411832.html

回到顶部