Spring - 仅使用静态成员注入类的实例

时间:2016-12-21 13:33:11

标签: java spring dependency-injection

我在包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在创建实例时抛出异常。更新构造函数解决了这个问题。

2 个答案:

答案 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在创建实例时抛出异常。更新构造函数解决了这个问题。