[英]Spring - Inject Instance Of Class with Only Static Members
我在com.example.dao
包中有一个Foo
类-
@Component
public class Foo {
public static final String nameAbc = "Abc";
public static final String nameDef = "Def";
public static List<String> getNames() {
return ImmutableList.of(nameAbc, nameDef);
}
// I created this for testing purpose.
// I was testing if maybe Spring needs an instance of class to inject.
public static Foo instance = new Foo();
}
在Configuration
BeanConfig类中,我希望注入List<Foo>
并对其执行一些操作-
@Configuration
public class BeanConfig {
private List<Foo> foos;
@Autowired
public void setFoos(List<Foo> foos) {this.foos = foos;}
@Bean
public Bar bar() {
// using foos in some logic here for creating Bar bean
}
}
我也尝试在BeanConfig
类上使用@ComponentScan
BeanConfig
@ComponentScan(basePackages = "com.example.dao")
但是由于我得到一个空列表,所以仍未注入Foo类。 这到底是什么错误?
更新-这是一个不同的问题com.example.dao
包中的某些bean没有默认的构造函数,这些构造函数导致@ComponentScan
在创建其实例时引发异常。 更新构造函数可以解决此问题。
我用Spring Boot来测试你的代码。 请检查您的配置
2016-12-21 20:45:36.326 INFO 25224 --- [main] com.mycompany.app.Application:在11.997秒内启动了应用程序(JVM运行12.861)
结果:[Abc,Def]
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
@Autowired
private Environment env;
private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);
@PostConstruct
public void initApplication() throws IOException {
LOGGER.info("Running with Spring profile(s) : {}", env.getActiveProfiles());
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
List<String> list = Foo.getNames();
System.out.println(list);
}
}
结果是一个不同的问题-com.example.dao包中的某些bean没有默认构造函数,这导致@ComponentScan在创建其实例时引发异常。 更新构造函数可以解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.