Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @DependsOn注释的逆运算_Java_Spring_Dependency Injection - Fatal编程技术网

Java @DependsOn注释的逆运算

Java @DependsOn注释的逆运算,java,spring,dependency-injection,Java,Spring,Dependency Injection,Spring(可能还有其他DI容器,但我正在使用Spring)识别@DependsOn注释。您可以使用它来标识必须在此bean之前启动的任何其他bean,例如 @Component @DependsOn({"initiatedFirst", "initiatedSecond"}) public class InitiatedThird { //... 是否有类似的注释,表示提供的bean必须在注释bean之后启动?比如说 @Component @DependencyOf({"initiate

Spring(可能还有其他DI容器,但我正在使用Spring)识别@DependsOn注释。您可以使用它来标识必须在此bean之前启动的任何其他bean,例如

@Component
@DependsOn({"initiatedFirst", "initiatedSecond"})
public class InitiatedThird {

//...
是否有类似的注释,表示提供的bean必须在注释bean之后启动?比如说

@Component
@DependencyOf({"initiatedSecond", "initiatedThird"})
public class InitiatedFirst {

//...

我认为这是一个非常常见的用例,当您无法访问bean的源代码/初始化,但希望事先配置其他bean时。这样的注释存在吗?

不存在,但如果您无法访问代码,仍然可以使用xml

<bean id="initiatedSecond" class="..." depends-on="initiatedFirst" />
<bean id="initiateThird" class="..." depends-on="initiatedSecond" />
另一个选择是使一个众所周知的早期实例化bean依赖于您的bean。(看起来很难看,但会奏效)


最后,您可以重写
AbstractApplicationContext.onRefresh()
并实例化bean。

问题在于,我希望导入一个SpringXML文件,其中依赖的bean已经完全配置好。我所说的是尽量减少任何重复配置。我只是添加了所有可以快速看到的选项。
public class DependencyConfigurer implements BeanFactoryPostProcessor {

    private Map<String, String[]> dependencies = new HashMap<String, String[]>();

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        for (String beanName : dependencies.keySet()) {
            BeanDefinition bd = beanFactory.getBeanDefinition(beanName);
            bd.setDependsOn(dependencies.get(beanName));
        }

    }

    public Map<String, String[]> getDependencies() {
        return dependencies;
    }

    public void setDependencies(Map<String, String[]> dependencies) {
        this.dependencies = dependencies;
    }

}