2013-05-14 84 views
1

我们有一个运行在tomcat上的spring beans(3个级别)的应用程序,这些bean注释了@Autowired并且是必需的。监控bean注入失败

我们想要做的是监控bean注入失败(这可能表示部署问题)。

我想我有两个选择这样做的方式:

  1. 而是在静态块使用@Autowired负载的豆子,如果 加载失败做点什么

  2. try{...} catch (NullPointerException e)环绕代码,所以如果豆是null引发异常。

  3. 检查bean是否等于每个方法的null

我认为#1是最优雅的,并添加了最少量的代码,但我想知道是否有一个优雅的方式来做到这一点,而没有静态块。

感谢

回答

3

这里有一些安静的选项。
我最喜欢的是注释所需的依赖与@Autowired(required=false)然后在法@PostConstruct测试anotated和处理丢失的依赖:

... 
@Autowired(required = false) 
private Bean dependency; 

@PostConstruct 
private void init() { 
    if(dependency==null) { 
    // handle missing dependecy 
    } 
} 

有关于Spring的dendecies的检查安静的有趣的文章。这有点旧,但仍然有益。
http://blog.springsource.org/2007/07/11/setter-injection-versus-constructor-injection-and-the-use-of-required/

+0

谢谢。我想我更喜欢这一个 – 2013-05-16 07:50:37

2

我认为ü需要@Autowired(required=true)

此外,required默认为true。因此,任何缺失的依赖关系都会引发警报。 请参阅@AutoWired

+0

需要的是默认为true,它会抛出BeanCreationException如果没有匹配的定义中找到 – 2013-05-14 11:14:27

+0

是你是对的...我更新在回答同一个适当的链接 – Kshitij 2013-05-14 11:22:05

+0

所以我只需要的try/catch BeanCreationException? – 2013-05-14 12:20:58

1

我认为最好的方法是使用setter注入并测试注入时bean是否为null。