如何创建Spring命名Bean的几个实例?

时间:2014-08-25 08:10:33

标签: java spring dependency-injection

让我们从代码开始:

@Named
public class Dashlet implements GlobalDashlet {
    private DashletContent dashletContent;
    //OTHER STUFF
}

如何创建Dashlet类的其他实例? 说我在这个类中有一个方法,如:

public GlobalDashlet getInstance(DashletContent content) {
        Dashlet dashlet =  new Dashlet();
        dashlet.setDashletContent(dashletContent);
    return dashlet;
}

如您所知,上述方法无法正常工作,因为托管bean应该由spring实例化,否则它不是托管bean。那么可以重现托管bean吗?

还有一个问题,是否可以将e bean连接到spring bean容器(以便spring可以管理它)?喜欢hibernate中的合并功能吗?

2 个答案:

答案 0 :(得分:1)

如果要附加到spring框架,可以使用原型范围:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-scopes-prototype

示例xml配置:

<bean id="accountService" class="com.foo.DefaultAccountService" scope="prototype"/>

示例javaConf配置:

@Configuration
public class AppConfig {
   @Bean
   @Scope("prototype")
   public Foo foo() {
      return new Foo();
   }
}

答案 1 :(得分:0)

您希望您的Dashlet bean成为原型范围。

然后,您可以通过创建使用者bean ApplicationContextAware来获取bean的新实例,然后在需要时使用applicationContext.getBean(..)来获取bean实例。

实现此目标的另一种方法是使用here所述的@Configuration注释。