Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 如何强制一个springbean在另一个bean之后创建?_Java_Spring - Fatal编程技术网

Java 如何强制一个springbean在另一个bean之后创建?

Java 如何强制一个springbean在另一个bean之后创建?,java,spring,Java,Spring,我有一个叫做SpringUtil的bean,它是 @Component public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext context = null; @Override public void setApplicationContext(ApplicationContext applicationContext)

我有一个叫做SpringUtil的bean,它是

@Component
public class SpringContextUtil implements ApplicationContextAware {

    private static ApplicationContext context = null;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
        throws BeansException {
        this.context = applicationContext;
    }

    public static <T> T getBean(String beanName) {
        return (T) context.getBean(beanName);
    }

    ...
}
还有另一个bean在其init方法中使用SpringUtil,因此它要求将SpringUtil作为bean加载到它之前。我试过@ConditionalOnBeanSpringUtil.class,但不起作用。有什么解决办法吗?或者从根本上说,使SpringUtil在所有其他bean之前被初始化。

可以使用@DependsOn注释实现这一目的

公共@interface DependsOn

当前bean所依赖的bean。指定的任何bean都保证由容器在该bean之前创建。在bean不通过属性或构造函数参数显式依赖于另一个bean,而是依赖于另一个bean的初始化*的副作用的情况下很少使用


*Emphasis是我的

您可以自动连接您的SpringUtil,Spring将管理依赖项:

@Autowired
private SpringUtil util;
另一种方法是自动连接设定器:

@Autowired
private setSpringUtil(SpringUtil springUtil)

如果它是另一个bean,那么为什么不简单地在其中注入依赖项,而使用这个装置呢?当你求助于像SpringContexture这样的事情时,你通常都在做错误的事情。它与ConditionalOnBean有什么区别?也许可以帮助;无论如何@ConditionalOnBean是特定于Spring引导的AFAIK@DependsOn它不适用于bean具有显式依赖关系的情况,而仅适用于存在隐式依赖关系的情况。由于OP声明第三个类在其init方法中使用SpringUtil,因此它是一个显式依赖项,应该通过@Autowired注入,@Inject或Spring支持的其他DI机制。@t以上回答了这个问题,以便在@Autowired无法执行此任务时,强制一个接一个地创建Springbean。最好添加一点解释,解释一下为什么这会起作用。问题是一个类对另一个类有依赖关系,所以这是一个如何在Spring中注入依赖关系的例子。另一种方法是\@Autowire一个setter方法、一个构造函数或一个事件来参与\@Configuration类中的\@Bean方法。教这个人钓鱼。。。谢谢你的建议。我一定会更新我的答案。你是对的!我想自动连接SpringUtil,但我写错了:私有SpringUtil;无论如何,谢谢你的建设性评论。仅供参考:你可以使用带有用户名的@与某人交谈,我只知道在这里撤销我的投票,因为我已重新登记。