Java 监视注入失败

Java 监视注入失败,java,spring,Java,Spring,我们有一个在tomcat上运行的SpringBeans 3级应用程序,这些beans用@Autowired注释,并且是必需的 我们想做的是监视bean注入失败,这可能表示部署问题 按照我的想法,我有两种选择: 如果需要,请在静态块中加载bean,而不是使用@Autowired 负载无法执行某些操作 用try{…}catch NullPointerException e环绕代码,因此如果bean为null,则抛出异常 检查bean是否在每个方法上都等于null。 我认为1是最优雅的,需要添加的代码

我们有一个在tomcat上运行的SpringBeans 3级应用程序,这些beans用@Autowired注释,并且是必需的

我们想做的是监视bean注入失败,这可能表示部署问题

按照我的想法,我有两种选择:

如果需要,请在静态块中加载bean,而不是使用@Autowired 负载无法执行某些操作

用try{…}catch NullPointerException e环绕代码,因此如果bean为null,则抛出异常

检查bean是否在每个方法上都等于null。 我认为1是最优雅的,需要添加的代码最少,但我想知道是否有一种优雅的方法可以在没有静态块的情况下实现这一点

谢谢我想你需要@Autowiredrequired=true

另外,默认情况下required为true。因此,任何缺失的依赖项都会发出警报。 请参见

我认为您需要@Autowiredrequired=true

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

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

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

这里有一些选项。 我最喜欢的方法是用@Autowiredrequired=false注释所需的依赖项,然后用@PostConstruct test注释所需的方法,并处理缺少的依赖项:

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

@PostConstruct
private void init() {
  if(dependency==null) {
     // handle missing dependecy
  }
}
有一篇关于春季检查所需密度的有趣文章。它有点老了,但还是有益的。
这里有一些选择。 我最喜欢的方法是用@Autowiredrequired=false注释所需的依赖项,然后用@PostConstruct test注释所需的方法,并处理缺少的依赖项:

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

@PostConstruct
private void init() {
  if(dependency==null) {
     // handle missing dependecy
  }
}
有一篇关于春季检查所需密度的有趣文章。它有点老了,但还是有益的。

required默认为true,如果找不到匹配的定义,它将抛出BeanCreationException是的,你是对的…我用正确的链接更新了答案,所以我只需要尝试/捕获BeanCreationException?@SigalShaharabani不,你不需要。只有保留@Autowired才能起作用,因为在缺少依赖项的情况下,应用程序不会部署。这本身就足够了。您不需要做任何其他特殊处理。@Kshitij但这里的问题是,我们希望监视这些故障,我们需要在它们发生时发送SNMP陷阱。我可以在不捕获异常的情况下执行此操作吗?默认情况下,required为true,如果没有找到匹配的定义,它将抛出BeanCreationException是的,你是对的…我正在用正确的链接更新相同的内容,所以我只需要尝试/捕获BeanCreationException?@SigalShaharabani不,你不需要。只有保留@Autowired才能起作用,因为在缺少依赖项的情况下,应用程序不会部署。这本身就足够了。您不需要做任何其他特殊处理。@Kshitij但这里的问题是,我们希望监视这些故障,我们需要在它们发生时发送SNMP陷阱。我可以这样做而不捕获异常吗?