Aop的最大意义是:在不改变原来代码的前提下,也不对源代码做任何协议接口要求。而实现了类似插件的方式,来修改源代码,给源代码插入新的执行代码。

1.spring中的aop演示

aop:面向方面编程.不改变源代码,还为类增加新的功能.(代理)
切面:实现的交叉功能.
通知:切面的实际实现(通知要做什么,怎么做).
连接点:应用程序执行过程期间,可以插入切面的地点.
切入点:真正的将通知应用到目标程序中的地点,一定是连接点.切入点是连接点的子集.
切入点决定了一个特定的类的特定方法是否满足一定的规则
引入:为类增加新的属性和方法. (引入通知)
目标对象:被通知的对象.
代理:把通知应用到目标对象以后,产生新的对象,该对象就称为代理对象.
织入:创建代理对象过程.
编译期织入:.java --> .class,需要特殊的编译器.
类装载期织入:将java字节码载入到jvm时,将通知织入.需要特殊的classloader.
运行期(runtime): cglib: aop alliance:aop联盟. spring代理方案:
1.接口代理:jdk动态代理,创建更加松耦合的系统.
2.对类代理:cglib代理,final方法无法被代理.

1.1步骤(XML配置)

1.导包(4+2+2+2+1) 基础包+日志包+aop、aspects+test+weaver+aopalliance

下面两个是spring需要的第三方aop包

com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

com.springsource.org.aopalliance-1.0.0.jar

一共是11个jar包

2.准备目标对象

3.准备通知

前置通知(Before Advice):在切入点选择的连接点处的方法之前执行的通知,该通知不影响正常程序执行流程(除非该通知抛出异常,该异常将中断当前方法链的执行而返回)。 后置通知(After Advice):在切入点选择的连接点处的方法之后执行的通知,包括如下类型的后置通知: 后置返回通知(After returning Advice):在切入点选择的连接点处的方法正常执行完毕时执行的通知,必须是连接点处的方法没抛出任何异常正常返回时才调用后置通知。 后置异常通知(After throwing Advice): 在切入点选择的连接点处的方法抛出异常返回时执行的通知,必须是连接点处的方法抛出任何异常返回时才调用异常通知。 后置最终通知(After finally Advice): 在切入点选择的连接点处的方法返回时执行的通知,不管抛没抛出异常都执行,类似于Java中的finally块。 环绕通知(Around Advices):环绕着在切入点选择的连接点处的方法所执行的通知,环绕通知可以在方法调用之前和之后自定义任何行为,并且可以决定是否执行连接点处的方法、替换返回值、抛出异常等等。环绕通知还需要负责决定是继续处理join point(调用ProceedingJoinPoint的proceed方法)还是中断执行。

五种通知的执行顺序为: 前置通知→环绕通知→正常返回通知/异常返回通知→后置通知。

appilcationContext.xml中添加aop的约束文件

4.配置进行织入,将通知织入目标对象中



JoinPoint(连接点):目标对象,所有可以增强的方法。
PointCut(切入点):目标对象。已经增强的方法
Advice(通知/增强):增强的代码
Target(目标对象):被代理对象
Weaving(织入):将通知应用到切入点的过程
Proxy(代理):将通知织入到目标对象之后,形成代理对象
aspect(切面):切入点*通知

https://yq.aliyun.com/ziliao/425722

1.2 步骤(注解配置)

前面几步是一样的,

代码优化

总结

一.注解代替xml配置

准备工作:

4+2 + spring-aop包

xml中导入context约束

在xml中开启扫描包中类的注解

注解:

@Component("BeanName") 将对象注册到spring容器

|- @Controler

|- @Service

|- @Repository

	@Scope	指定对象的作用范围
|- singleton
|- prototype @Value 值类型属性注入 @Autowired 自动属性注入.根据类型注入.
@Qulifier 指定注入的对象的名称 @Resource 指定对象的名称注入 @PostConstruct 初始化方法
@PreDestory 销毁方法

二.spring AOP开发

	aop思想: 纵向重复,横向抽取.
|- filter中
|- 动态代理
|- interceptor中 spring AOP: 封装了动态代理技术.来体现aop. springaop实现: 可以对所有对象进行代理
|- 动态代理 代理需要实现接口.
|- cglib代理 对目标对象继承代理. springaop名词:
join point: 连接点.所有可以织入通知的方法.
point cut : 切入点.需要|已经织入通知的方法.
advice: 需要增强的代码.
weaving: 动词.将通知应用的切点的过程.
target: 目标对象.
proxy: 代理对象
aspect: 切面. 切入点+通知 步骤:
1.导包
4+2
2 aop+aspect
2 aop联盟+weaving
2.准备目标对象 3.准备通知类
前置通知
后置通知 方法正常结束
环绕通知
异常拦截通知
后置通知 无论如何都执行 4.配置文件中配置,导入aop约束
1>目标对象
2>通知对象
3><aop:config>
<aop:ponint-cut id="切点名称" expression="execution(切点表达式)" />
<aop:aspect ref="通知对象名称" >
<aop:before method="" ponintcut-ref="" />
<aop:after-returning method="" ponintcut-ref="" />
<aop:around method="" ponintcut-ref="" />
<aop:after-throwing method="" ponintcut-ref="" />
<aop:after method="" ponintcut-ref="" />
</aop:aspect> 扩展:使用注解完成aop
1.导包
4+2
2 aop+aspect
2 aop联盟+weaving
2.准备目标对象 3.准备通知类
4.配置文件中配置,导入aop约束
1>目标对象
2>通知对象
3><aop:aspect-autoproxy> 开启注解aop 5.注解
@Aspect 指定当前类是通知类 @Before 前置通知方法
@after-returning 后置通知方法
@around 环绕通知方法
@after-throwing 异常拦截通知方法
@after 后通知方法 @PointCut 抽取切点表达式

最新文章

  1. Dota2 demo手游项目历程
  2. 一种让 IE6/7/8 支持 media query 响应式设计的方法
  3. cookie手工注入
  4. [Android Tips] 5. INSTALL_PARSE_FAILED_MANIFEST_MALFORMED on Android-2.1
  5. 匈牙利命名法、骆驼命名法、帕斯卡(pascal)命名法
  6. 过滤器Filter(拦截jsp页面的跳转)案例:
  7. Union all的用法实例sql
  8. DirectShow建立一个视频捕捉程序
  9. win7 下 qwt安装教程
  10. C#_MVC_Repository_CRUD_Model
  11. JavaScript 获取Select标签选中的项
  12. UITableView的详细使用
  13. JavaScript –type
  14. Java基础类
  15. Beta冲刺——第二天
  16. Sublime Text 查找时排除指定的文件夹或文件
  17. 32位linux(ubuntu) exec: arm-none-linux-gnueabi-g++未找到;The tslib functionality test failed!
  18. 解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
  19. vue.js(四)
  20. HTTPS 信任证书

热门文章

  1. Spark on Yarn运行错误:Yarn application has already ended! It might have been killed or unable to launch application master
  2. 2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题
  3. TOJ 4394 Rebuild Road
  4. CentOS 6.5 安装MySQL数据库
  5. Java学习第二十四天
  6. (二) 修改IDEA自带的 maven 仓库
  7. ubuntu遇到了 dpkg was interrupted, you must manually run &#39;dpkg..的问题
  8. [转]Wrapping multiple calls to SaveChanges() in a single transaction
  9. Google android开发者 中国官方文档开放了呀
  10. 键盘按键keyCode大全,js页面快捷键