2017-03-04 61 views
2

我有一个这样的Java Spring配置类。我想设置一个我的几个bean依赖的变量,将它变成一个bean,并将它用作依赖项。我怎样才能使setVariable()方法首先发生?我从Guice转换我的代码,其中这个变量是在重写的'Configuration'方法中设置的。春天有这样的事吗?在弹簧配置中设置公共变量

@Configuration 
class SpringConfiguration{ 
    String variable; 

    public void setVariable(){ 
     variable = System.getenv("whatever") 
    } 

    @Bean 
public void variable(){ 
    return variable; 
} 

    @Bean 
    public void myService(){ 
     return new MyService(variable); 
    } 

    @Bean 
    public void myService2(){ 
     return new MyService2(variable); 
    } 
+0

[如何在bean初始化完成后调用方法?](http://stackoverflow.com/questions/1088550/how-to-call-a-method-after-bean-initialization-is-完成) – Jeremy

回答

3

你可以做这样的事情:

@Configuration 
class SpringConfiguration { 

    @Bean(name="variable") 
    public String geVariable() { 
     return System.getenv("whatever"); 
    } 

    @Bean 
    @DependsOn("variable") 
    public MyService getMyService() { 
     return new MyService(geVariable()); 
    } 

    @Bean 
    @DependsOn("variable") 
    public MyService2 getMyService2() { 
     return new MyService2(geVariable()); 
    } 
} 

就像你可以确保variableservice1service2之前被初始化,注意DependsOn在这种情况下,仅仅是为了清楚起见。