Spring AOP笔记

2017-03-12  本文已影响0人  hbh404

AOP的核心概念

AOP(Aspect-Oriented Programming)面向切面编程可以实现横切点与他们所影响的对象之间的解耦。如将公共的日志、权限、事务等业务隔离出来,但不影响原来程序的逻辑性,提高了程序的可重用性,提高了开发效率等。

Aop常用术语:

  1. 通知:切面的工作
    • 前置通知(Before):在目标方法前执行自定义行为。
    • 后置通知(After):在目标方法后执行自定义行为。
    • 返回通知(After-returning):在目标方法执行后执行自定义行为。
    • 异常通知(After-throwing):在目标方法抛出异常后执行自定义行为。
    • 环绕通知(Around): 在目标方法调用前和调用后都执行自定义行为。
  2. 连接点:所有使用通知的应用。
  3. 切点:所有使用通知的方法。
  4. 切面:通知和切点的结合。
  5. 引入:向现有的类添加新方法或属性。
  6. 织入:把切面应用到目标对象并创建新的代理对象的过程。织入点可分为:
    • 编译期:在编译时织入,需要特殊的编译器。
    • 类加载期:在目标类加载到JVM时织入,需要特殊的类加载器。
    • 运行期:应用运行时织入,AOP容器为目标对象动态创建一个代理对象。SpringAOP以这种方式工作。

AOP注解

栗子:

@Aspect
public class AspectDemo{
    
    @PointCut("execution(* 方法名(..))")
    public void test(){}
    
    @Before("test()")
    public void before() {
        
    }
    
    @After("test()")
    public void after() {
    
    }
    
}

@Configuration
@EnableAspectJAutoProxy
@ComponentScan
public class AspectConfig {

    @Bean
    public AspectDemo() {
        return new AspectDemo(); 
    }
    
} 

AOP的XML命名空间

栗子:

<aop-config>
    <aop-aspect ref="bean的id">
        <aop:before pointcut="execution(* 切点方法名(..))" method="前置通知方法名">
        </aop:before>
        <aop:after pointcut="execution(* 切点方法名(..))" method="后置通知方法名">
        </aop:after>
    </aop-aspect>
</aop-config>

Aspect指示器

在SpringAOP中使用Aspect的切点表达式语言来定义切点。

execution(其他指示器都相同):

栗子:

@Before("execution(* 方法名(..))")
public void before(JoinPoint JoinPoint) {
}

@After("@annotation(自定义接口名字)") 
public void after(JoinPoint JoinPoint) {
    
}

@Around"@annotation(自定义接口名字)") 
public void after(ProceedingJoinPoint proceedingJoinPoint) {
    
}
上一篇下一篇

猜你喜欢

热点阅读