我在包Foo
-
com.example.dao
@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
}
}
我还尝试在@ComponentScan
类 -
BeanConfig
@ComponentScan(basePackages = "com.example.dao")
但是我没有注入Foo类,因为我得到一个空列表。究竟是什么错误?
更新 -
它出现了一个不同的问题 - com.example.dao
包中的一些bean没有默认构造函数,导致@ComponentScan
在创建实例时抛出异常。更新构造函数解决了这个问题。
答案 0 :(得分:0)
我使用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);
}
}
答案 1 :(得分:0)
它出现了另一个问题 - com.example.dao包中的某些bean没有默认构造函数,导致@ComponentScan在创建实例时抛出异常。更新构造函数解决了这个问题。