我有一个使用FichierCommunRetriever
@Value
注释Spring
的课程application.properties
。但我正在努力使其发挥作用。
所以在application.donneeCommuneDossier=C\:\\test
application.destinationDonneeCommuneDossier=C\:\\dev\\repertoireDonneeCommune\\Cobol
我有:
FichierCommunRetriever
我的班级public class FichierCommunRetriever implements Runnable {
@Value("${application.donneeCommuneDossier}")
private String fichierCommunDossierPath;
@Value("${application.destinationDonneeCommuneDossier}")
private String destinationFichierCommunDossierPath;
}
正在使用包含以下代码的条目:
application.properties
我们正在使用ApplicationConfig
课程中的以下代码加载@ImportResource("classpath:/com/folder/folder/folder/folder/folder/applicationContext.xml")
:
ApplicationConfig
在bean
中,我定义了一个FichierCommunRetriever
,在这样的新主题中使用Thread threadToExecuteTask = new Thread(new FichierCommunRetriever());
threadToExecuteTask.start();
:
FichierCommunRetriever
我认为我的问题是,因为applicationContext
在一个单独的线程中运行,所以该类无法到达{{1}}并且无法给出值。
我想知道注释是否有用,或者我必须改变我获得这些值的方式?
答案 0 :(得分:2)
在applicationConfig中,您应该以这种方式定义bean:
@Configuration
public class AppConfig {
@Bean
public FichierCommunRetriever fichierCommunRetriever() {
return new FichierCommunRetriever();
}
}
然后,在Spring加载之后,您可以通过应用程序上下文访问您的bean
FichierCommunRetriever f = applicationContext.getBean(FichierCommunRetriever.class);
Thread threadToExecuteTask = new Thread(f);
threadToExecuteTask.start();
现在您确定您的bean位于Spring上下文中并且已初始化。 此外,在Spring XML中,您必须加载属性(此示例使用上下文命名空间):
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
...
<context:property-placeholder location="classpath:application.properties" />
...
</beans>
答案 1 :(得分:2)
使用new
创建FichierCommunRetriever的实例,而不是要求Spring返回bean实例。所以Spring并没有控制这个实例的创建和注入。
您的配置类中应该有以下方法,并调用它来获取bean实例:
@Bean
public FichierCommunRetriever fichierCommunRetriever() {
return new FichierCommunRetriever();
}
...
Thread threadToExecuteTask = new Thread(fichierCommunRetriever());