我们有一个在tomcat上运行spring bean(3级)的应用程序,bean用@Autowired
注释并且是必需的。
我们想要做的是监控bean注入失败(这可能表明部署问题)。
我想的方式我有两种选择:
而不是使用@Autowired
在静态块中加载bean,如果
加载失败做某事
使用try{...} catch (NullPointerException e)
的环绕代码,因此如果bean为null
,则抛出异常。
null
。我认为#1是最优雅的,并且添加的代码量最少,但我想知道是否有一种优雅的方法可以在没有静态块的情况下执行此操作。
由于
答案 0 :(得分:3)
这里有一些安静的选择。
我最喜欢用@Autowired(required=false)
注释所需的依赖关系,然后在用@PostConstruct
测试分配的方法中处理并处理缺少的依赖关系:
...
@Autowired(required = false)
private Bean dependency;
@PostConstruct
private void init() {
if(dependency==null) {
// handle missing dependecy
}
}
有关于在春天检查所需的减免的安静有趣的文章。它有点老了,但还是有益的 http://blog.springsource.org/2007/07/11/setter-injection-versus-constructor-injection-and-the-use-of-required/
答案 1 :(得分:2)
我认为你需要@Autowired(required=true)
此外,required
默认为true。因此,任何缺少的依赖项都会引发警报。
见@AutoWired
答案 2 :(得分:1)
我认为最好的方法是使用setter注入并测试注入时bean是否为null。