Java 如何强制一个springbean在另一个bean之后创建?
我有一个叫做SpringUtil的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)
@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;无论如何,谢谢你的建设性评论。仅供参考:你可以使用带有用户名的@与某人交谈,我只知道在这里撤销我的投票,因为我已重新登记。