AOC,即面向切面编程,是一种编程思想。
如果说面向对象编程(OOP)是一种纵向的编程思维,AOC则是横向的编程思维。用于Spring中可以弥补OOP存在的不足,例如难以对方法细节进行单独修改而不影响子父类,AOP将所有非核心代码进行统一管理,降低了代码的耦合性。
底层使用代理技术。
需求:给计算的业务类添加日志
MyAdvice类
形参 JoinPoint
给需要用到的增强方法添加形参 (JoinPoint joinpoint)
//获取方法属于的类的信息
String simpleName = joinPoint.getTarget().getClass().getSimpleName();
//参数列表等类似
@AfterReturning中
形参(Object result)接收返回结果
@AfterThrowing中
(Throwable t)
固定语法execution(切点表达式)
访问修饰符
方法返回参数类型
前两位可以整合成一个*
包的位置
类的名称
方法名
形参列表
execution(public int com.atguigu.spring.aop.target.Calculator.dir ( int,int ))
环绕方法需要自己在通知中定义目标方法的执行。
@Around("pc()")
public Object transaction(ProceedingJoinPoint joinPoint){
//保证目标方法被执行
Object[] args= joinPoint.getArgs();
Object result = null;
try{
System.out.println("开启事务");
//增强代码
result = joinPoint.proceed(args);
}catch(Throwable e){
System.out.println("事务回滚");
throw new RuntimeException(e);
}finally{
}
return result;
}
@Order() 值越小,优先级越高(外圈),越前置先执行,越后置后执行。
没有接口时会从jdk转为cglib。
spring.xml 一般放在resources中
<aop:config>
<!--声明切点标签@Pointcut-->
<!--切面配置标签@Aspect-->
<!--位置指定标签-->
</aop:config>
Spring-tx 是对 Spring-AOP 的再次封装。
事务管理器(接口)用于具体提供事务方法。
需要: