首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ExceptionHandler整类

Java ExceptionHandler整类
EN

Stack Overflow用户
提问于 2020-05-29 22:49:57
回答 1查看 33关注 0票数 1

有没有办法为类和异常类设置ExceptionHandler?我有一个这样的类:

代码语言:javascript
复制
public class MyServiceClass {

    public void foo() {
        //some Code... 
        throw new MyCustomRuntimeException();
        //some more Code... 
    }

    public void foo2() {
        //some other Code... 
        throw new MyCustomRuntimeException();
        //more other Code... 
    }
}

现在我想定义一个类似这样的MyCustomRuntimeException处理程序:

代码语言:javascript
复制
private void exceptionHandler(MyCustomRuntimeException ex) {
    //some Magic
}

每次在这个类中抛出MyCustomRuntimeException时都应该使用它。我知道我可以在每个方法中使用try,catch,finally,但是有一个类范围的解决方案吗?我想跳过样板文件

代码语言:javascript
复制
try {
...
} catch (MyCustomRuntimeException ex) {
    exceptionHandler(ex);
}

我在这个应用程序中使用了Spring (没有Spring Boot),但是我没有发现如何在普通的Spring中使用@ExceptionHandler。我尝试了以下方法(不起作用):

EasyApplication

代码语言:javascript
复制
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class EasyApplication {

    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class);
        FooBar foo = context.getBean(FooBar.class);
        foo.doException();
    }
}

FooBar

代码语言:javascript
复制
import org.springframework.web.bind.annotation.ExceptionHandler;

public class FooBar {

    public void doException() {
        throw new RuntimeException();
    }

     @ExceptionHandler(value = RuntimeException.class)
     public void conflict() {
         System.out.println("Exception handled!");
     }
}

MyConfiguration

代码语言:javascript
复制
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyConfiguration {

    @Bean(name = "FooBar")
    public FooBar fooBar() {
        return new FooBar();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-05-29 23:10:41

如果您没有使用spring-mvc,并且不是在多线程环境中,那么您将能够很好地完成以下工作。

代码语言:javascript
复制
public class ExceptionHandler implements Thread.UncaughtExceptionHandler {

    public void uncaughtException(Thread t, Throwable e) {
        System.out.println("This is from the uncaught");
    }

}

然后在您的main方法中添加这一行。这适用于小型应用程序,而spring在这方面的作用很小。

代码语言:javascript
复制
Thread.currentThread().setUncaughtExceptionHandler(new ExceptionHandler());

如果你有一个更大的应用程序,并且需要一个更优雅的解决方案--在你的应用程序中引入方面(AOP)。

编辑: 2020年6月2日

这是使用spring-mvc的时候。

您可以使用@ExceptionHandler来实现这一点。Spring Tutorial

(通过@ControllerAdvice) @ExceptionHandler可以处理类特定处理程序和全局处理程序

类特定的处理程序在全局处理程序之前触发。因此,最佳实践是在全局处理程序中使用RuntimeExceptionException,而不是在单个类中使用它们。进一步减少样板文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62088688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档