用途
在不修改原来模型的基础上,动态修改模型以满足新的需求
底层实现:
代理Java 静态代理和动态代理例子
静态代理:代理类与目标类实现相同接口,代理类中调用了目标类的方法,在客户端类中实现的是代理类的对象;一个代理只能代理一种类型,而且是在编译器就已经确定被代理的对象。而动态代理是在运行时,通过反射机制实现动态代理,并且能够代理各种类型的对象,在Java中要想实现动态代理机制,需要java.lang.reflect.InvocationHandler接口和 java.lang.reflect.Proxy 类的支持
Spring 的基于 AspectJ 的 AOP 开发
Spring 使用 AspectJ 进行 AOP 的开发: XML 的方式
AOP的入门开发
- 引入jar包
- 编写目标类并配置
- 编写切面类并配置
- 进行aop的配置
<aop:config>
<aop:pointcut expression=”execution(表达式)” id=”pc1”/>
<aop:aspect >
<aop:before method=”” pointcut-ref=”pc1”/>
</aop:aspect>
</aop:config>
- 通知类型
- 前置通知
- 后置通知
- 环绕通知
- 异常抛出通知
- 最终通知
- 切入点表达式写法:
execution(表达式)
Spring的AOP的注解(思想–)
- AOP的相关的注解
- @Aspect :定义切面
- 通知的注解
- @Before :前置通知
- @AfterReturning :后置通知
- @Around :环绕通知
- @AfterThrowing :异常抛出通知
- @After :最终通知
- 切入点
- @Pointcut :切入点
声明式事务管理—底层思想就是AOP
- XML
■ 引入aop开发包
■ 配置事务管理器
■ 配置增强<tx:Advice>
■ 配置aop - 注解
■ 引入aop开发包
■ 配置事务管理器
■ 开启注解事务
■ 在业务层(Service)添加注解