每次

时间:2017-02-09 14:55:24

标签: java spring

我会试着向你解释我的问题。

我有一个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,以便正确复制这些文件。

提前谢谢。

2 个答案:

答案 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)

定义依赖于它的其他bean