我会试着向你解释我的问题。
我有一个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 */
}
}
然后我有一些取决于该副本结果的bean,它们的定义如下:
@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,以便正确复制这些文件。
提前谢谢。
答案 0 :(得分:-1)
所以我想知道是否有一种方法可以创建第一个bean 并在任何其他bean之前调用,以便正确复制它们 文件。
如果你只是想以这样的方式控制bean创建,即只能在B类之后实例化A类,你可以这样做。
@Service
@DependsOn("B")
public class A {}
但是,你问的不仅仅是实例化,我还会通过启动spring cloud配置服务器来解决这个用例。
答案 1 :(得分:-1)
不要覆盖afterPropertiesSet()
方法。将其重命名为其他内容并删除@Override
注释。重命名您的方法(通常称为init()
但它可以是任何名称)标记带有@PostConstruct
注释的方法和Spring将在构造函数和所有注入完成后立即调用它。那应该是你的伎俩。然后使用注释@DependsOn(Your_bean_name)