没有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配置{..}