006Spring面向切面
01、基本术语---->POM中配置spring-aspects
1、通知(Advice)---->要做的事
前置通知(@Before)
后置通知(@After)
返回通知(@AfterReturning)
异常通知(@AfterThrowing)
环绕通知(@Around)
2、连接点(Join point)---->可能会应用通知的时机 3、切点(Pointcut)---->一个或多个连接点 4、切面(Aspect)---->通知+切点 5、引入(Introduction)---->向现有类添加新方法或属性 6、织入(Weaving)
编译期
类加载期
运行期---->Spring AOP
02、基本特性
只支持方法调用相关的连接点
基于动态代理(运行期织入)
03、Spring AOP所支持的AspectJ切点指示器
实际执行匹配
execution()
限制
args() 指定参数
@args() 指定参数注解
this()
target
@target()
within() 限制连接点类
@within()
@annotation
指示器连接符
&& || !
04、Spring AOP支持的bean()指示器
使用bean ID或名称作为参数来限制,只匹配特定的bean05、不处理参数的切面
开启自动代理
@Configuration
@EnableAspectJAutoProxy---->启动自动代理
@ComponentScan
public class ConcertConfig{
@Bean
public Audience audience(){---->切面
return new Audience();
}
}
某连接点
package concert;
public interface Performance{
public void perform();
}
@Aspect
public class Audience {
@Pointcut("execution(*concert.Performance.perform(..)) && within(concert.*)")---->定义命名的切点
public void performance(){}---->切点名称,仅供附着 @Before("performance()")
public void do1(){} @After("performance()")
public void do2(){} @Around("performance()")
public void do3(ProceedingJoinPoint jp){---->若函数本来有参数,jp参数要放在最左边
System.out.println("Before");
jp.proceed();---->可以不掉用,也可多次调用;若有返回值,在最后也该返回,以免影响原线程
System.out.println("After")
} @AfterReturning("performance()")
public void do4(){} @AfterThrowing("performance()")
public void do5(){} }
06、带参数切面
开启自动代理
...
某连接点
public class BlankDisc{
public void playTrack(int trackNumber){
...
}
}
切面
@Aspect
public class TrackCounter {
private Map<Integer, Integer> trackCounts = new HashMap<Integer, Integer>(); @Pointcut("execution(* soundsystem.CompactDisc.playTrack(int)) && args(trackNumber)")//使用args()在切点中声明参数,此参数将传递到通知中
public void trackPlayed(int trackNumber) {} @Before("trackPlayed(trackNumber)")
public void countTrack(int trackNumber){
int currentCount = getPlayCount(trackNumber);
trackCounts.put(trackNumber, currentCount + 1);
} public int getPlayCount(int trackNumber){
return trackCounts.containsKey(trackNumber)? trackCounts.get(trackNumber) : 0;
}
}
07、通过切面为Performance接口引入新功能
public interface Encoreable {
void performEncore();
} @Aspect
public class EncoreableIntroducer {
@DeclareParents(value = "concert.Performance+", defaultImpl = DefaultEncoreable.class)
public static Encoreable encoreable;---->引入的接口
}
value---->指定哪种类型的bean引入此接口
defaultImpl---->指定为引入功能提供实现的类
@DeclareParents注解标注的静态属性指明要引入的接口
006Spring面向切面的更多相关文章
- 面向过程(POP)、面向对象(OOP)、面向接口(IOP)、面向切面(AOP)
面向过程:典型的是C/C++的结构体,结构体里只有变量,没有处理变量的方法,需要专门编写处理变量的方法. 面向对象:ArrayList<Integer> list=new ArrayLis ...
- AOP 面向切面编程, Attribute在项目中的应用
一.AOP(面向切面编程)简介 在我们平时的开发中,我们一般都是面对对象编程,面向对象的特点是继承.多态和封装,我们的业务逻辑代码主要是写在这一个个的类中,但我们在实现业务的同时,难免也到多个重复的操 ...
- javascript面向切面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- AOP面向切面编程的四种实现
一.AOP(面向切面编程)的四种实现分别为最原始的经典AOP.代理工厂bean(ProxyFacteryBean)和默认自动代理DefaultAdvisorAutoProxyCreator以及Bea ...
- spring入门(四)【面向切面编程】
开发过程中很多时候会用到日志.事务等操作,这些操作如果要写在业务代码中会相当麻烦,这时就会用到面向切面编程(AOP),AOP作为一种编程思想,和OOP有着不同的侧重点,面向对象侧重于万事万物皆对象,而 ...
- 面向切面编程AOP
本文的主要内容(AOP): 1.AOP面向切面编程的相关概念(思想.原理.相关术语) 2.AOP编程底层实现机制(动态代理机制:JDK代理.Cglib代理) 3.Spring的传统AOP编程的案例(计 ...
- Spring-AOP面向切面编程
AOP是面向切面编程,区别于oop,面向对象,一个是横向的,一个是纵向. 主要解决代码分散和混乱的问题. 1.概念: 切面:实现AOP共有的类 通知:切面类中实现切面功能的方法 连接点:程序被通知的特 ...
- AOP 面向切面编程
AOP http://blog.csdn.net/xiang_j2ee/article/details/6851963 Android 支持 AspectJ 这个库来实现面向切面编程. 使用 Apac ...
- 关于面向切面编程Aspect Oriented Programming(AOP)
最近学到spring ,出来了一个新概念,面向切面编程,下面做个笔记,引自百度百科. Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题.AOP主要实 ...
随机推荐
- 将python的代码文件打包成可执行文件
1.使用pip install Pyinstaller 命令安装 2.使用命令 pyinstaller -F *.py打包成exe 3.在\dist文件夹下找到exe; 一.pyinstaller ...
- 【App性能】:TraceView分析法
抓取traceview的日志有两种方式, 1,是在代码中片段中添加: Debug.startMethodTracing(“hello”); ....... Debug.stopMethodTracin ...
- create-react-app安装出错问题解决
在用create-react-app的时候 报错 错误如下图: 在SF上查到说是或许是因为国内npm拉去资源,拉去不到的问题,可以试着从解决创建create-react-app慢的方法着手: 解决方法 ...
- lightgbm调参方法
gridsearchcv: https://www.cnblogs.com/bjwu/p/9307344.html gridsearchcv+lightgbm cv函数调参: https://www. ...
- 2019.4.25 表格表单与HTML5 && CSS3
目录 表格 标签 属性 表格间距离 表格的内边距 表格的边框 样式 边框合并 行合并 列合并 display 表单 标签 属性 提交的网址 请求方式 input相关 扩大响应范围 字符 密码 单选框 ...
- SQL Server性能监控常用语句
.查找目前SQL Server所执行的SQL语法,并展示资源情况: SELECT s2.dbid , DB_NAME(s2.dbid) AS [数据库名] , --s1.sql_handle , ( ...
- spring boot快速入门 2 :属性配置
属性配置:在application.properties中配置 第一步:配置端口号和项目名 并启动 第二步:在浏览器查看请求 第二种配置方式: 在application.yml中配置.(较为常用) 注 ...
- java 位运算符,逻辑运算符
逻辑运算符;布尔值时使用 a=true;b=false &: 逻辑或 例:a & b=false; |: 逻辑与 例:a | b=true; !:逻辑非 例:!a=fal ...
- Elasticsearch集群和索引常用命令
https://www.cnblogs.com/pilihaotian/p/5846173.html REST API用途 ES提供了很多全面的API,大致可以分成如下几种: 1 检查集群.节点.索引 ...
- XRP(瑞波币)账户管理系统
目录 账户管理 分配常规密钥对 修改或移除常规密钥对 设置多重签名 发送多签名交易 账户管理 分配常规密钥对 XRP Ledger允许帐户授权二级密钥对(称为常规密钥对)来对未来的交易进行签名, 如果 ...