没有web的Spring Java异常侦听器

没有web的Spring Java异常侦听器,java,spring,exception,Java,Spring,Exception,我希望捕获应用程序中发生的所有异常/错误。 因此,我搜索了stackoverflow,并在这个问题上留下了短文: 现在我想知道这是否能以更好的方式实现 我当前的申请: 我在一个独立的代码中使用Spring框架和Spring JPA,而不使用web组件。我有一个Config.java文件,其中包含四个主要bean: 时间织工 数据源 实体经理工厂 事务管理器 我现在想我可以用下面这样的东西: package me.test; import java.beans.ExceptionListen

我希望捕获应用程序中发生的所有异常/错误。
因此,我搜索了stackoverflow,并在这个问题上留下了短文:
现在我想知道这是否能以更好的方式实现

我当前的申请:
我在一个独立的代码中使用Spring框架和Spring JPA,而不使用web组件。我有一个
Config.java
文件,其中包含四个主要bean:

  • 时间织工
  • 数据源
  • 实体经理工厂
  • 事务管理器
我现在想我可以用下面这样的东西:

package me.test;

import java.beans.ExceptionListener;
import org.springframework.stereotype.Component;

@Component
public class ErrorListener implements ExceptionListener {
    @Override
    public void exceptionThrown(Exception e) {
        System.out.println("Some error occured ... That's bad :(");
    }
}  
我真的不确定这个
例外监听器是否像我希望他那样工作,所以我想也许有人可以向我解释一下我想要的东西是否可能。
也许不是用这个监听器,而是用另一种方法

还有一个一般性问题:
我通常如何注册一个侦听器?这里不是也有一个
@EventListener
站吗?我是否必须将其放在方法之前,然后让spring将其作为组件的一部分进行扫描?
或者我必须在我的上下文中手动注册它吗

谢谢:)

---编辑---

后面加上
似乎很好(见下面的注释)。现在,我的项目如下所示:

package me.test;

import java.beans.ExceptionListener;
import org.springframework.stereotype.Component;

@Component
public class ErrorListener implements ExceptionListener {
    @Override
    public void exceptionThrown(Exception e) {
        System.out.println("Some error occured ... That's bad :(");
    }
}  
大体上:

new AnnotationConfigApplicationContext(Config.class);
Config.java

@EnableTransactionManagement
@ComponentScan("me.test.*")
@Configuration
@EnableJpaRepositories
@EnableAspectJAutoProxy
public class Config {
    @AfterThrowing(pointcut = "execution(public * *(..)", throwing = "ex")
    public void doRecoveryActions(DataAccessException ex) {
        System.out.println("Error found");
    }
    /* loadTimeWeaver, dataSource, entityManagerFactory and transactionManager with the "@Bean" annotation */
}
然后在一个随机文件中抛出一个错误,比如
inti2=5/0中抛出新异常(“test”)
但不幸的是,它不起作用:(

我做错了什么?

你可以在抛出建议后使用Spring AOP建议。

我已经考虑过了,但是周围的
@需要一个函数作为参数。那么我如何获得一个函数,无论何时何地抛出异常都会执行?你可以做的如下
@aspect public类后throwing示例{@posterthrowing(pointcut=“execution(public**(..)”,throwing=“ex”)public void doRecoveryActions(DataAccessException ex){//…}
基本上,如果任何公共方法抛出异常,请执行advice方法。您可以根据需要更改切入点。ok,听起来不错。谢谢:)但现在我还有两个问题:第一,是否缺少一个
<代码>“执行(公共**(..)”
最后一个。。。或者没有夹子是正确的?第二:我如何将这个类集成到我的spring项目中?在所有教程中都有一个xml文件(servlet、web等),但我没有这些文件。我在纯java中没有这样的配置。1.我不认为缺少“')。但是,当您执行程序时,您会知道。2.在spring中,您可以通过xml或注释两种方式提供元信息。如果您没有任何xml配置,则可以使用注释来使用Aspect。您可以按如下方式执行操作:
code
@enableSpectjautoproxy执行与@Configuration@Configuration@enableSpectjautoproxy公共类aspectjautoproxy配置{..}