1

我们有一个在 tomcat 上运行的带有 spring bean(3 级)的应用程序,bean 带有注释@Autowired并且是强制性的。

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

我认为我有两种选择:

  1. 如果加载失败,则不要在静态块中使用@Autowired加载 bean,而是执行某些操作

  2. 用 包围代码try{...} catch (NullPointerException e),所以如果 bean 是null抛出异常。

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

我认为#1 是最优雅的,并且要添加的代码最少,但我想知道是否有一种优雅的方法可以在没有静态块的情况下做到这一点。

谢谢

4

3 回答 3

3

这里有一些安静的选择。我最喜欢的是用然后在用test 注释的方法
中注释所需的依赖项并处理缺少的依赖项:@Autowired(required=false)@PostConstruct

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

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

有一篇关于在 Spring 中检查所需节点的安静有趣的文章。它有点老,但仍然有益。
http://blog.springsource.org/2007/07/11/setter-injection-versus-constructor-injection-and-the-use-of-required/

于 2013-05-14T12:22:32.793 回答
2

我想你需要@Autowired(required=true)

此外,required默认情况下为 true。因此,任何缺少的依赖项都会引发警报。请参阅@AutoWired

于 2013-05-14T11:10:54.067 回答
1

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

于 2013-05-14T11:16:52.113 回答