spring的aop使用,记住三个点
1.将业务逻辑组件和切面类加入到容器中,告诉spring那个是切面类@Aspect 2.子啊切面类上的每一个通知方法上标注通知注解,告诉spring何时何地运行(切入点表达式) 3.开启基于注解的aop模式:@EnableAspectJAutoProxy
需求:在定义一个业务逻辑类MathCaculator:在业务逻辑运行的时候进行将日志进行打印 *,在方法之前,方法之后,方法运行时打印日志
一、创建一个计算器类MathCalculator
package com.hjh.aop;
public class MathCalculator {
public int div(int i, int j) {
System.out.println("div运行中。。。。");
return i / j;
}
}
二、创建一个切面类
package com.hjh.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
@Aspect
public class LogAspects {
@Pointcut("execution(public int com.hjh.aop.MathCalculator.*(..))")
public void pointCut() {
}
@Before("pointCut()")
public void logStart(JoinPoint joinPoint) {
System.out.println("" + joinPoint.getSignature().getName() + "除法运行....参数列表:{}");
}
@After("pointCut()")
//如果是外部类想引用此切面类,可以写成 权限类名 @After("com.hjh.aop.LogAspects.pointCut()")
public void logEnd(JoinPoint joinPoint) {
System.out.println(joinPoint.getSignature().getName() + "除法结束.....");
}
@AfterReturning(value = "pointCut()", returning = "result")
public void logReturn(Object result) {
System.out.println("除法正常返回....运行结果:{" + result + "}");
}
@AfterThrowing(value = "pointCut()", throwing = "e")
public void logException(Exception e) {
System.out.println("除法异常....异常信息:{" + e + "}");
}
}
三、创建一个配置类,在配置类中开启自动切面自动代理@EnableAspectJAutoProxy
/*
* 1.将业务逻辑组件和切面类加入到容器中,告诉spring那个是切面类@Aspect
* 2.子啊切面类上的每一个通知方法上标注通知注解,告诉spring何时何地运行(切入点表达式)
* 3.开启基于注解的aop模式:@EnableAspectJAutoProxy
*
*/
@EnableAspectJAutoProxy //开启切面代理功能
@Configuration
public class MainConfigurationAop {
@Bean
public MathCalculator mathCalculator(){
return new MathCalculator();
}
@Bean
public LogAspects logAspects(){
return new LogAspects();
}
}
四、测试
public class BeanTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("config");
MathCalculator mathCalculator = context.getBean("mathCalculator", MathCalculator.class);
mathCalculator.div(2,1);
}
}
结果
div除法运行....参数列表:{}
div运行中。。。。
div除法结束.....
除法正常返回....运行结果:{2}
Process finished with exit code 0