我需要从singleton获得原型类.我发现方法注入是可行的方法,但我真的不知道如何使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
以下是类示例:
public class MyClass1 {
doSomething() {
myClass2();
}
//I want this method to return MyClass2 prototype
public MyClass2 myClass2(){
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用@Lookup注释做到这一点?
我有两个豆,父母和孩子.子bean我已声明为Protoype范围.
我想新的子对象用于调用Parent类中的任何子方法.例如.在下面的例子中,我希望语句1调用方法sayHi对不同的子对象和语句2调用sayHi1对不同的子对象.
一种方法是在调用任何子方法之前实现ApplicationContextAware并获取新的子对象context.getBean("").但我不想这样做.
还有其他选择吗?
@Component
public class Parent{
@Autowired
Child child;
public void sayHello(){
child.sayHi(); -------------- (1)
}
public void sayHello1(){
child.sayHi1(); --------------- (2)
}
}
@Component
@Scope(value=BeanDefinition.SCOPE_PROTOTYPE)
public class Child{
public void sayHi(){
System.out.println("Hi Spring 3.0");
}
public void sayHi1(){
System.out.println("Hi1 Spring 3.0 ");
}
}
Run Code Online (Sandbox Code Playgroud)