黑马程序员技术交流社区

标题: 【郑州校区】JavaEE三大框架课堂笔记之Spring-day09(下) [打印本页]

作者: 我是楠楠    时间: 2017-12-19 09:58
标题: 【郑州校区】JavaEE三大框架课堂笔记之Spring-day09(下)
本帖最后由 我是楠楠 于 2017-12-19 10:00 编辑

【郑州校区】JavaEE三大框架课堂笔记之Spring-day09(下)

【郑州校区】JavaEE三大框架课堂笔记之Spring-day09(上)

经典的基于代理的AOP开发(了解)
基本的jar包
1. bean
2. core
3. context
4. expression
5. aop
6. 需要aop联盟的依赖jar包
第一步:编写目标(target)
第二步增强(advice)
第三步在applicationContext.xml文件中配置
第四 测试
基于aspectJ切点传统开发
第一步:在spring的配置文件中定义目标与通知
第二步:使用<aop:xxx>标签来完成切面与切点声明
注意1:需要在xml配置文件中导入aop声明
注意2:因为我们使用aspectj的切面声明方式 需要在导入aspectj的jar包
传统spring aop开发总结
第一步:编写目标对象(target)
第二步:编写通知(advice)
传统的aop开发中,通知是需要实现指定接口。
第三步 在配置文件中配置切面(切面=切点+通知)
<aop:config>来声明要对aop进行配置
<aop:pointcut>它是用于声明切点(简单说就是对哪些方法进行拦截)
<aop:advisor> 定义传统的aop的切面,传统的aop切面它只能包含一个切点与一个增强
<aop:aspect>定义aspectj框架的切面.,它可以包含多个切点与多个通知
关于切点表达式写法
这个语法源于aspectJ的语法,spring中aop开发,对aspectj不是完全支持,只支持部分语法。
在开发中使用的比较多的是execution语法.
关于execution语法常用:
1. execution(public * *()) 所有的public的方法
2. execution(* cn.itheima.aop.*(..)) 所有的aop包下的所有类的方法(不包含子包)
3. execution(* cn.itheima.aop..*(..)) 所有的aop包及其子包下的所有类的方法
4. execution(* cn.itheima.aop.IOrderService.*(..)) IOrderService接口中定义的所有方法
5. execution(* cn.itheima.aop.IOrderService+.*(..)) 匹配实现特定接口所有类的方法
6. execution(* save*(..)) 区配所有的以save开头的方法
Spring整合aspectj框架实现的aop
在现在的开发中使用这种方案比较多.
在spring2.0以后它支持jdk1.5注解,而整合aspectj后可以使用aspectj语法,可以简化开发。
Aspect:切面 =切点+通知(多个切点与多个通知的组合)
AspectJ 它是一个第三方框架,spring从2.0后可以使用aspectJ框架的部分语法.
AspectJ框架它定义的通知类型有6种
1. 前置通知Before 相当于BeforeAdvice
2. 后置通知AfterReturning 相当于AfterReturningAdvice
3. 环绕通知 Around 相当于MethodInterceptor
4. 抛出通知AfterThrowing 相当于ThrowAdvice
5. 引介通知DeclareParents 相当于IntroductionInterceptor
6. 最终通知After 不管是否异常,该通知都会执行
相比spring 的传统AOP Advice多了一个最终通知
基于xml配置方案第一步:创建目标(target)
第二步:创建通知(增强  advice)
注意:在aspectj中它的增强可以不实现任何接口,只需要定义出增强功能(方法)
第三步:在spring的xml 配置文件中来配置
<aop:config>下的<aop:aspect>是aspectJ框架用来声明切面的。
前置通知
后置通知
环绕通知
异常抛出
注意:目标行为只有抛出了异常后才会执行这个增强方法
最终通知
无论是否有异常,最终通知都会执行.
关于通知上的参数
1. 在前置通知上可以添加JoinPoint参数
通过它可以获取目标相关的信息
使用前置通知可以完成日志记录,权限控制
2. 在后置通知上添加的参数
第二个参数val它可以获取目标方法的返回值
注意:需要在配置文件中配置
3. 环绕通知上的参数
它是我们开发中应用最多的,可以完成日志操作,权限操作,性能监控,事务管理
4. 抛出异常通知上的参数
第二个参数Throwable它是用于接收抛出的异常
注意:需要在配置文件中声明
5. 最终通知上的参数
可以使用最终通知完成资源释放
关于代理方式选择
在spring的aop开发中,它使用的是代理方案,代理实现有两种:
1. jdk的proxy
2. cglib
spring框架默认情况下,会对有接口的类使用proxy代理。没有接口的类使用cglib代理
Proxy-target-class的值默认是false,它代表有接口使用proxy代理
问题:如果现在对目标要使用cglib代理(不考虑是否有接口)?
只需要将proxy-target-class设置为true.

【郑州校区】Python3 创建虚拟环境
【郑州校区】python基础之基本指令汇总
【郑州校区】Ubuntu 如何创建快捷方式

【郑州校区】python基础班之Linux 终端命令格式
【郑州校区】python基础班笔记之python操作系统
【郑州校区】subline 取消自动更新提示
【郑州校区】常用 Linux 命令的基本使用
【郑州校区】MyBatis 入门开发 —-基础入门
【郑州校区】文件和目录常用命令
【郑州校区】MyBatis 入门开发 ----Mapper接口开发
【郑州校区】系统信息相关命令
【郑州校区】用户权限相关命令
【郑州校区】远程管理常用命令
【郑州校区】文件和目录(理解)
【郑州校区】python学习之其他命令
【郑州校区】MyBatis 入门开发 ----配置文件
【郑州校区】MyBatis 入门开发 ----输入,输出参数
【郑州校区】三大框架之Struts2-day01
【郑州校区】三大框架之Struts2-day02
【郑州校区】将第3方的jar 添加到本地Maven库
【郑州校区】Hibernate入门------HelloWord
【郑州校区】三大框架笔记之Struts2-day03
【郑州校区】三大框架课堂笔记之Hibernate-day04
【郑州校区】Django 之----入门
【郑州校区】Django 之----模版的使用
【郑州校区】三大框架课堂笔记之Hibernate-day05
【郑州校区】三大框架课堂笔记之Hibernate-day06
【郑州校区】三大框架课堂笔记之Hibernate-day07(上)
【郑州校区】三大框架课堂笔记之Hibernate-day07(下)
【郑州校区】JavaEE三大框架课堂笔记之Spring-day08
【郑州校区】JavaEE三大框架课堂笔记之Spring-day09(上)
传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出

55.png (7.98 KB, 下载次数: 58)

55.png

作者: 我是媛媛    时间: 2017-12-19 13:55

作者: 我是色色    时间: 2017-12-19 17:11
{:8_507:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2