Spring:通知(Advice)
通知的分类:
前置通知(MethodBeforeAdvice)、后置通知(AfterReturningAdvice)、环绕通知(MethodInterceptor)、异常通知(ThrowsAdvice)
我们先定义一个接口:ISomeInterface
public interface ISomeInterface {
String doFirst();
void doSecond();
}
我们再定义接口的实现类SomeService:
public class SomeService implements ISomeInterface {
@Override
public String doFirst() {
System.out.println("执行doFirst方法!!!");
return "aynu";
}
@Override
public void doSecond() {
System.out.println("执行doSecond方法!!!");
}
}
一、前置通知:
前置通知类
容器配置
测试类
结果
二、后置通知:
后置通知
结果
三、环绕通知:
环绕通知
结果
四、异常通知:
异常通知
其实实现这个接口刚打开时里面是没有任何方法的,那这个方法我们可以打开源码,发现里面定义了这样几个方法
我们选用其中一个,把其复制粘贴过来就行。
五、异常通知的典型应用:
异常通知里可以放异常类,执行相应的异常信息。
异常类
用户名错误异常
密码错误异常
接口:boolean chekUser(String username,String password) throws UserException;
接口实现类
异常通知类
异常通知类前两个里面放的相应的异常类,如果有相应的异常则执行,异常不属于这两类则执行第三个异常信息。
结果
六、为目标方法织入多个切面:
因为interceptorNames是一个数组。
七、使用CGLB动态代理:
我们知道JDK的Proxy用于有接口的,而CGLB用于没接口的,如果我们的项目没有接口,系统默认(自动)使用CGLB动态代理,如果我们有接口,可以通过以下设置使用CGLB动态代理(在工厂里):