2017-07-18 45 views
1

注释字段/构造函数仅提供该类的一个实例,即使该bean被配置为原型。但是我想要一个循环中的特定类的新实例。在基于java的配置中使用@ Lookup-method

下面是我的组件类:

@Component 
class Link{ 

    @Autowired 
    private RandomClass rcobj; 

    public void getFiveInstancesOfRandomClass(){ 
     //here I want to create five new instances for RandomClass but I get only one by auto-wiring 
    } 
} 

Config.class

@Configuration

class ApplicationConfig{ 
    @Bean 
    public Link link(){ return new Link();} 

    @Bean 
    @scope ("prototype") 
    public RandomClass randomClass(){ return new RandomClass();} 
} 

我看着它主要使用基于XML配置几个例子。其中一个解决方案是调用ApplicationContext,但我想用lookup-method来解决这个问题。

回答

2

要注入样机通过Java配置独居我使用以下技术:

Singleton类:

public abstract class Single 
{ 
    abstract Proto newInstance(); 

    public void useBean() 
    { 
    System.out.println(newInstance()); 
    } 

} 

原型类:

public class Proto 
{ 

} 

语境:

public class Context 
{ 
    @Bean 
    public Single single() 
    { 
    return new Single() { 
     @Override 
     Proto newInstance() 
     { 
     return proto(); 
     } 
    }; 
    } 

    @Bean 
    @Scope("prototype") 
    public Proto proto() 
    { 
    return new Proto(); 
    } 
} 

类来进行测试:

public static void main(String[] args) 
    { 
    ApplicationContext context = new AnnotationConfigApplicationContext(Context.class); 
    Single single = context.getBean(Single.class); 
    single.useBean(); 
    single.useBean(); 
    } 

从输出我们可以看到,每个呼叫使用不同的对象:

[email protected] 
[email protected] 

P.S. 我完全同意你的看法,我们不应该将bean与applicationContext绑定。它创造了额外的耦合,我认为这不是一个好的做法。

+0

谢谢。我还发现了一个更好的解决方案https://stackoverflow.com/questions/14880847/howto-generate-prototype-objects-with-in-a-singleton-bean-using-spring-java-conf – Struse

相关问题