Spring知识点小结(三)
一、aop的简介
aop:面向切面编程
aop是一种思想,面向切面编程思想,Spring内部提供了组件对aop进行实现
aop是在运行期间使用动态代理技术实现的思想
aop是oop延续
面向过程:C
面向对象:Java
面向切面:AOP
面向服务架构:SOA
aop的底层实现:动态代理
基于JDK:目标对象必须有接口(proxy是接口的实现)
基于cglib:目标对象不需要有接口(proxy是目标子类)
aop的基本概念、术语
目标对象(target)
代理对象(proxy)
连接点(joinpoint): 可以被增强的方法
切(入)点(pointcut): 真正可以被增强的方法
增强/通知(advice):功能增强的方法
切面(aspect):切点+增强
织入(weaver):将切点和增强结合的过程

二、基于xml方式的aop配置
开发步骤:
1、导入aop的jar
spring-aop-4.2.4.RELEASE spring的aop核心包
spring-aspects-4.2.4.RELEASE spring的切面包
com.springsource.org.aopalliance-1.0.0 aop联盟包
com.springsource.org.aspectj.weaver-1.6.8.RELEASE aspectj的织入包
2、定义目标(目标内部有切点)、定义切面(增强在切面内部)
public class Target implements TargetInterface
public class MyAspect
3、配置目标和切面到spring容器中
<!-- 配置目标 -->
<bean id="target" class="com.ghdu.aop.Target"></bean>
<!-- 配置切面 -->
<bean id="myAspect" class="com.ghdu.aop.MyAspect"></bean>
4、配置aop的织入
导入aop的命名空间
xml配置代码:
<!-- 配置目标 -->
<bean id="target" class="com.ghdu.aop.Target"></bean>
<!-- 配置切面 -->
<bean id="myAspect" class="com.ghdu.aop.MyAspect"></bean>
<!-- 配置aop的织入 -->
<aop:config>
<!-- 指定切面对象是谁 -->
<aop:aspect ref="myAspect">
<!-- 切面=切点+增强 -->
<!-- 细节2:切点表达式的写法
expression写法
示例:execution(public void com.ghdu.aop.Target.show())
语法:execution([访问修饰符] 返回值 包.类.方法(参数类型列表))
注意:其中
访问修饰符可以省略
返回值、包、类、方法 可以使用*作为通配符代表任意
参数类型列表 可以使用..作为通配符代表任意
示例:
* com.ghdu.service.impl.CustomerServiceImpl.*(..) CustomerServiceImpl的任意方法
* com.ghdu.service.impl.*.*(..) 对impl包下的任意类的任意方法
* com.ghdu.service.*.*.*(..) 对service包下的任意子包下的任意类的任意方法
* com.ghdu.service..*.*.*(..) 对service包下的任意后代包下的任意类的任意方法
-->
<!-- <aop:pointcut expression="execution(public void com.ghdu.aop.Target.*(..))" id="myPointcut"/>
<aop:pointcut expression="execution(public void com.ghdu.aop.Target.show(..))" id="myPointcut2"/> -->
<!-- 细节1:aop的增强/通知有哪些
aop:before 前置增强
aop:after-returning 后置增强
aop:around 环绕增强
aop:after-throwing 异常抛出增强
aop:after 最终增强
-->
<!-- <aop:before method="before" pointcut-ref="myPointcut"/>
<aop:after-returning method="afterReturning" pointcut-ref="myPointcut"/>
<aop:around method="around" pointcut-ref="myPointcut"/>
<aop:after-throwing method="afterThrowing" pointcut-ref="myPointcut"/>
<aop:after method="after" pointcut-ref="myPointcut2"/> -->
<aop:around method="around" pointcut="execution(* com.ghdu.aop.*.*(..))"/>
<aop:after method="after" pointcut="execution(* com.ghdu.aop.*.*(..))"/>
</aop:aspect>
</aop:config>
三、基于注解方式的aop配置
开发步骤:
1、导入aop的jar
spring-aop-4.2.4.RELEASE spring的aop核心包
spring-aspects-4.2.4.RELEASE spring的切面包
com.springsource.org.aopalliance-1.0.0 aop联盟包
com.springsource.org.aspectj.weaver-1.6.8.RELEASE aspectj的织入包
2、定义目标(目标内部有切点)、定义切面(增强在切面内部)
public class Target implements TargetInterface
public class MyAspect
3、配置目标和切面到spring容器中
@Component("target")
public class Target implements TargetInterface
@Component("myAspect")
public class MyAspect
4、配置aop的织入
@Component("myAspect")
//<aop:aspect ref="myAspect">
@Aspect
public class MyAspect {
//<aop:before method="before" pointcut="execution(* com.ghdu.aop.*.*(..))"/>
//@Before("execution(* com.ghdu.anno.*.*(..))")
public void before(){
System.out.println("前置增强....");
}
注意:
在配置文件中配置aop的自动代理
<!-- 开启aop的自动代理 -->
<aop:aspectj-autoproxy/>
全注解: 在原始注解的基础上,创建配置类
//声明
@Configuration
//扫描包
@ComponentScan("com.gudf.allanno")
//设置aop自动代理
@EnableAspectJAutoProxy
public class SpringConfiguration {
}
有关aop的知识扩充
aop的底层实现

aop、spring、aspectj三者的关系

动态代理

全盘委托机制

aop应用场景
方法性能测试
日志控制
事务控制......
Spring知识点小结(三)的更多相关文章
- Spring知识点小结(二)
一.配置非自定义的Bean(数据源DataSource模型) DBCP数据源: 导入dbcp的jar包:dbcp+pool+connector 代码实现: ...
- Spring知识点总结(三)之注解方式实现IOC和DI
1. 注解概念 所谓注解就是给程序看的提示信息,很多时候都用来作为轻量级配置的方式. 关于注解的知识点,参看java基础课程中java基础加强部分的内容. 2 ...
- Spring知识点小结(一)
一.Spring的简介 1.spring是一个full-stack轻量级开源框架 2.spring的两大核心 IoC: inverse of control 控制反转:反转是对象 ...
- Hibernate知识点小结(三)-->一对多与多对多配置
一.多表关系与多表设计 1.多表关系 一对一: 表的设计原则(分表原则): 优化表的性能 基于语意化分表 ...
- Spring知识点小结汇总
Spring部分 1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控 ...
- Spring知识点小结(四)
一.JdbcTemplate(jdbc模版--抽取的工具) web阶段DBUtils: QueryRunner runner = new QueryRunner(dataSource); ...
- Spring知识点总结(三)之Spring DI
1. IOC(DI) - 控制反转(依赖注入) 所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和 ...
- Struts2知识点小结(三)--值栈与ognl表达式
1.问题一 : 什么是值栈 ValueStack 回顾web阶段 数据交互问题? 客户端提交数据 到 服务器端 request接受数据+BeanUtils实体封装 ...
- 【SpringBoot MQ 系列】RabbitMq 核心知识点小结
[MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...
随机推荐
- easyui window窗口 不垂直居中
$('#hotelDetailWrap').window({ width: 1040, height: 160, collapsible: false, minimizable: false, max ...
- 关于zepto 选择特定值的input 报错问题
zepto 选择特定值的input 时,需要用单引号或双引号引用这个特定值 否则 报错
- IE8下的怪异模式
使用DWZ框架,老是出现点击button后在winxp IE8下出现新页面,经过检查后发现IE8下submit后,return false就不行了,必须使用window.event.returnVal ...
- SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)
1.概念 SpringBoot 开发深入 2.具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制,但是也需要清楚的认识到以下的问题,在实际的项目开发之中,尤其是 Java 的 MVC ...
- 浅谈回归(二)——Regression 之历史错误翻译
我很好奇这个问题,于是搜了一下.我发现 Regression 这个词 本意里有"衰退"的意思. 词根词缀: re- 回 , 向后 + -gress- 步 , 级 + -ion 名词 ...
- Git学习-Git时光机之版本回退(二)
Git,是Linus花了两周时间用C写的一个分布式版本控制系统.牛人该怎么定义? 零.结论先行 倒叙总结一下: HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git ...
- Vue入门基础(火柴)
前言 由于个人十分欣赏博友——小火柴的蓝色理想,他的博文我看了大多数,觉得十分的精彩,然而很多都是看后即忘.我想除了没有经常动手敲代码,更可能是在看的时候忽略了很多细节,因此打算把他的博文通通给“抄袭 ...
- js 显示 base64编码 的二进制流 图片
Data URI scheme.Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入.比如上面那串字符,其实是一张小图片,将这些字 ...
- ss.c
linux下 ss -i 可显示rto. how to display tcp rto http://linuxaleph.blogspot.com/2013/07/how-to-display-tc ...
- php大文件上传失败的原因及解决方法
为什么上传大文件总是失败,上传小文件就没有问题.关于PHP大文件上传失败的原因及解决方法如下: 第1种情况:文件上传时存放文件的临时目录必须是开启的并且是 PHP 进程所有者用户可写的目录.如果未指定 ...