Spring bean初始化之前的初始化
我会尽力向您解释我的问题。Spring bean初始化之前的初始化
我有一个bean,其工作是将文件从我的类路径复制到服务器上的本地文件夹。 这个bean这样定义和使用属性的值就知道位置,它应该复制文件:
@Service("wsConfig")
public class WorkspaceConfig implements InitializingBean {
@Value("path.to.copy")
String path;
@Value("classpath.to.copy")
String folder
@Override
public void afterPropertiesSet() {
/** Do my copy stuff */
}
}
然后,我有一些豆子取决于该副本的结果,那些被这样定义:
@PropertySource(value = "file://${user.home}/${path.to.copy}/file.properties")
@Service
public class Bean{
/** Bean Stuff */
}
我的问题是,当bean被初始化时,当弹簧将占位符与值链接在一起时,文件位于:file://${user.home}/${path.to.copy}/file.properties
不存在。 所以我想知道是否有一种方法可以在任何其他bean之前创建并调用第一个bean,以正确地复制这些文件。
预先感谢您。
所以我在想,如果有第一个bean来,以便正确地复制这些 文件创建 与其它bean之前调用的方法。
如果你只是想以这样的方式来控制bean的创建,A类应该只在类B后实例化,那么你可以这样做。
@Service
@DependsOn("B")
public class A {}
但是,你所要求的东西不仅仅是实例,我会解决由旋转起来弹簧云配置服务器这种使用情况。
请勿重写afterPropertiesSet()
方法。将其重命名,并删除@Override
注释。重命名你的方法(通常称为init()
,但它可以是任何名称)用@PostConstruct
注释标记该方法,Spring将在构造函数之后立即调用它,并完成所有注入。这应该做你的伎俩。然后使用注释@ DependsOn(Your_bean_name)
为什么更改'@ PostConstruct'注释方法的'afterPropertiesSet'? –
这是否意味着在设置everybean的每个属性之后调用afterPropertiesSet? –
你并不是假设实现任何Spring接口,因此不需要重写任何Spring方法。注释@PostConstruct为您提供了所需的功能 –
定义依赖它的其他bean。可能[取决于另一个bean](http://docs.spring.io/spring/docs/current/javadoc-api/org/ springframework/context/annotation/DependsOn.html)可能会有所帮助 –
这绝不会奏效。 '@ PropertySource'将在评估'@ Value'注解之前被处理,并且它不是一个多遍处理,所以简单地说它就不起作用。在你的'ApplicationContext'被初始化之前,你需要执行这个逻辑,并且你需要把它放入,比如'ApplicationContextInitializer'。 –