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 是一个基于 ...
随机推荐
- Unicode汉字转码小工具
点击按钮即可使用! 在这里粘贴或输入 转换结果:
- 移动端Hybird的网络层优化策略
一.前端代码策略:域名切换(多域名部署),解决DNS缓存及域名劫持 二.客户端策略 客户端在空闲时ping cdn节点域名列表中的域名,测量延时.丢包等数据.如果延迟 > xxx,丢包 > ...
- 基于Tag的Docker自动构建
构建规则 一旦您的Tag符合“release-v$version"的形式,将触发自动构建:1)若您有$version相关的Tag构建规则,则以$version的Tag规则帮您构建:2)若您没 ...
- Mac系统丢失管理员
今天把osx变成平行用户,提示说要重启,但是一进来,我靠,自己的管理员用户变成了普通用户.我靠,有这么搞的嘛? 不能安装软件,不能https,不能保存密码,什么也不能做了. 网上一查,找到了几个解决方 ...
- data-* 自定义数据属性 遇到的坑
除非data-*自定义数据属性的值是固定不变的,否则最好不要把data-*作为查询条件. 例子: <div data-index="0">hello</div&g ...
- Azkaban调度器
Azkaban介绍 Azkaban 是由 Linkedin 公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程.Azkaban 使用 job 配置文件建立任务之间 ...
- SQL Server ->>监控和管理Tempdb
Tempdb作为一个公共数据库,存储着一些临时的数据.有些是用户自己创建的,有些是SQL Server自己创建的.Tempdb空间被使用的一些常见场景有 用户自定义:临时表和表变量.游标. SQL S ...
- lua学习笔记之userdata
这一段时间看了<programming in lua>中的第28章,看一遍并不是很难,但是只是朦胧的感觉,雾里看花,水中望月.最终还是决定敲出来自己看看,练练手,结果受益不少,也遇到了一些 ...
- Sandworm Attack小结
这个漏洞刚出来时就分析过,当时大致弄明白了原理,但对很多细节和原理还是一知半解.后来开始找工作……今天终于有时间来把欠的这部分功课补上. 这个漏洞网上的各种中英文分析已经很多了,因此这里我只根据自己的 ...
- 新浪OAuth网络登录,请求access_token时遇到21323的错误
按照新浪给出的文档写了,但是遇到错误,总是获取不到token值,也是post方式提交的. 查阅百度资料,发现有网友给出了解决办法,是因为 文档中有这么一句提示: HTTP请求方式:POST 这句话太简 ...