aop面向切面编程 主要是用到了动态代理技术
基于Java的主要AOP实现有:
AspectJ
Spring AOP
JBoss AOP
jdk动态代理:被代理对象必须实现接口
cglib动态代理:通过加载字节码生成动态代理对象,生成的动态代理对象相当于是原对象的子类(由于cglib是基于继承的方式实现类的动态代理,因此无法实现对final修饰的类的代理)
Spring中有哪些不同的通知类型
- 前置通知(Before Advice): 在连接点之前执行的Advice,不过除非它抛出异常,否则没有能力中断执行流。使用
@Before
注解使用这个Advice。 - 返回之后通知(After Retuning Advice): 在连接点正常结束之后执行的Advice。例如,如果一个方法没有抛出异常正常返回。通过
@AfterReturning
关注使用它。 - 抛出(异常)后执行通知(After Throwing Advice): 如果一个方法通过抛出异常来退出的话,这个Advice就会被执行。通用
@AfterThrowing
注解来使用。 - 后置通知(After Advice): 无论连接点是通过什么方式退出的(正常返回或者抛出异常)都会执行在结束后执行这些Advice。通过
@After
注解使用。 - 围绕通知(Around Advice): 围绕连接点执行的Advice,就你一个方法调用。这是最强大的Advice。通过
@Around
注解使用。