繁体   English   中英

Spring-仅具有静态成员的类注入实例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM