目录
1、使用Spring AOP 实现日志输出
1、AOP概念
2、使用Spring AOP 实现日志输出
3、增强处理类型
1、前置增强处理
public void before(JoinPoint jp) {
System.out.println("前置通知:"+jp.getSignature().getName()+":方法执行之前...");
System.out.println("连接点对象"+jp.getTarget().getClass().getSimpleName());
System.out.println("连接点方法"+jp.getSignature());
System.out.println("连接点方法参数"+jp.getArgs());
}
2、后置增强处理
public void afterReturn(JoinPoint jp,Object obj) {
System.out.println("返回通知:"+jp.getSignature().getName()+":方法正确执行之后获取的返回值为:"+obj);
}
3、异常增强处理
public void afterThrow(JoinPoint jp,Exception e) {
if(e instanceof ArithmeticException) {
System.out.println("发生了算数异常,我们要这样处理.....");
}
System.out.println("异常通知:"+jp.getSignature().getName()+":方法发生的异常为:"+e);
}
4、最终增强处理
public void after(JoinPoint jp) {
System.out.println("后置通知:"+jp.getSignature().getName()+":方法执行之后...");
}
5、环绕增强处理
public Object myAround(ProceedingJoinPoint pjp) {
Object obj=null;
System.out.println("环绕通知方法前");
//如果该方法执行,代表执行目标方法
try {
obj=pjp.proceed();
obj=30;
} catch (Throwable e) {
e.printStackTrace();
}
System.out.println("环绕通知中获取方法返回值:"+obj);
System.out.println("环绕通知方法后");
return obj;
}
2、简化Spring 的 AOP配置
简化Spring的AOP配置通常情况下有两种方式:
①通过使用schema形式简化AOP配置
②通过使用annotation形式简化AOP配置
1、通过使用 schema 形式实现简化 AOP 配置
关键步骤:
①编写业务类,放入IOC容器
②编写切面类,放入IOC容器
③编写配置文件实现AOP,关键代码如下:
<!-- 此处省略业务类的bean代码 -->
<!-- 声明切面类 -->
<bean id="myAspect" class="com.zl.aspect.MyAspect"></bean>
<!-- 配置指定切入的对象 -->
<aop:config>
<!-- 配置切点表达式 -->
<aop:pointcut expression="execution(* com.zl.service..*.*(..))"
id="pointCut1" />
<aop:pointcut expression="execution(* com.zl.service..*.*User(..))"
id="pointCut2" />
<!-- 配置切面对象 -->
<aop:aspect ref="myAspect">
<aop:after method="after" pointcut-ref="pointCut1" />
<aop:before method="before" pointcut-ref="pointCut2" />
</aop:aspect>
</aop:config>
2、通过使用 annotation 实现简化 AOP 配置
1、准备工作
2、使用 @AspectJ 注解实现切面
@Component
@Aspect
public class MyAspect {
/*
* 前置通知:方法执行之前执行
*/
@Before("execution(* com.zl.service..*.*(..))")
public void before(JoinPoint jp) {
System.out.println("前置通知:" + jp.getSignature().getName() + ":方法执行之前...");
}
}
3、使用 @AspectJ 注解定义其他增强类型