【发布时间】:2014-01-27 15:03:30
【问题描述】:
谁能帮我解决 Spring Boot 问题?
我想创建一个工厂 bean 作为我的应用程序上下文的一部分,但我希望能够使用注入的属性值来实例化它。但是,Spring 似乎会先加载 FactoryBeans,如下所示:
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.AbstractFactoryBean;
import org.springframework.beans.factory.config.ListFactoryBean;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
@EnableAutoConfiguration
public class TestClass
{
@Value("${test.value}")
String value;
@Bean
public Object test1()
{
System.out.println("test.value=" + value );
List<String> list = new ArrayList<String>();
ListFactoryBean factory = new ListFactoryBean();
factory.setSourceList(list);
return factory;
}
public static void main(String[] args)
{
SpringApplication.run(TestClass.class, args);
}
}
当使用
运行时java -Dtest.value=HELLO -jar myTest.jar
它正确加载了值:
test.value=HELLO
但是,当我指定要加载的 bean 实际上是一个工厂 bean,并以相同的方式运行它时:
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.AbstractFactoryBean;
import org.springframework.beans.factory.config.ListFactoryBean;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
@EnableAutoConfiguration
public class TestClass
{
@Value("${test.value}")
String value;
@Bean
public AbstractFactoryBean test1()
{
System.out.println("test.value=" + value );
List<String> list = new ArrayList<String>();
ListFactoryBean factory = new ListFactoryBean();
factory.setSourceList(list);
return factory;
}
public static void main(String[] args)
{
SpringApplication.run(TestClass.class, args);
}
}
该值为空,因为它还没有被注入。
test.value=null
有没有办法解决这个问题?
谢谢
【问题讨论】:
标签: spring