手动实现aop编程
手动实现aop编程(运用代理模式实现)
aop:aspect object programming
功能:让关注点与业务代码分离
关注点:重复代码就叫做关注点
切面:关注点形成的类,就叫切面(类)
面向切面编程,就是只对功能都有的重复的代码抽取,在在运行的时候动态植入“切面类代码“
切入点:执行目标对象方法,动态植入切面代码
可以通过切入点表达式,指定拦截哪些类的哪些方法给指定的类在运行的时候植入切面类代码
注解实现aop编程
第一步:引入jar包
第二部引入名称空间
第三部:开启aop注解扫描 <aop:aspectj-autoproxy></aop:aspectj-autoproxy>(注解扫描是<context:component-scan base-package="包名+类名"></....>)
@aspect //指定当前类为切面类
@before (“execute(* 包名+类名+方法名(..))”) 类如:("execute(* liYaBin.proxy.UserDao.save(..)") // ..为方法里面的参数 before为在执行目标方法之前执行
@after(切入点表单式)
//优化
@pointcut(切入点表单式)
public void testPoint_(){
}
@before("testPont_")
@after("testPoint_")
目标对象有实现接口,spring会自动选择使用动态代理,相反则会选择使用cglib代理
包名或方法名可以用*代理 代表为全部
其他注解
@AfterReturning("testPoint") //调用目标方法之后运行
@AfterThrowing() //当目标方法出现错误时运行
但是After不管是否出现异常都会执行而AfterThrow在有异常是不会执行
@around(“testPoint”)//环绕部标方法执行
public voidaround(ProceedingJoinPoint pjp)throws Throwable{
system.out.print(""); /* 环绕相当于before和after
pjp.proceed();
system.out.print(""); */
}
手动实现aop编程的更多相关文章
- Spring第五篇【cglib、手动实现AOP编程】
前言 到目前为止,已经简单学习了Spring的Core模块.也会怎么与Struts2框架进行整合了-.于是我们就开启了Spring的AOP模块了-在讲解AOP模块之前,首先我们来讲解一下cglib代理 ...
- Spring框架--AOP编程
2 手动实现AOP编程 AOP 面向切面的编程, AOP可以实现"业务代码"与"关注点代码"分离 // 保存一个用户 public void add(User ...
- Spring的AOP编程
1.手动实现AOP编程(代理模式) AOP是面向切面的编程,主要功能就是实现"业务代码"和辅助业务代码的"关注点代码"分离.在一个方法中,出了核心的业务代码,其 ...
- Spring之AOP编程
一.AOP简介 AOP的英文全称是Aspect Oriented Programming,意为:面向切面编程. AOP采取横向抽取的机制,取代了传统纵向继承体系的代码复用.AOP常用于 ...
- 设计模式(四) 手动实现AOP代理
1.事务的使用: 每次对数据库操作我们都需要开启事务,事务开启后,我们就需要对数据库进行一次或者多次操作,当操作完成后就需要提交事务.比如一个业务中多次操作数据库,但是当某个方法出错的时候,我们需要整 ...
- Spring AOP编程(二)-AOP实现的三种方式
AOP的实现有三种方式: l aop底层将采用代理机制进行实现. l 接口 + 实现类 :spring采用 jdk 的动态代理Proxy. l 实现类: ...
- spring的aop编程(半自动、全自动)
1.spring的半自动代理(从spring中获取代理对象) (1)spring中的通知类型 spring中aop的通知类型有五种: 前置:在目标方法执行前实施加强 后置:在目标方法执行后实施加强 环 ...
- 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入
概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为“移花接木 ...
- 使用spring方式来实现aop编程
1:什么是aop? Aspect Oriented Programming 面向切面编程 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译 ...
随机推荐
- js借助JSONP实现百度搜索框提示效果
主要借助百度搜索的API,调用时会存在跨域问题,需要通过JSONP来解决这个问题,代码如下(代码中部分使用ES6语法): HTML <input type="text" id ...
- lunix下的redis数据库操作——set集合
创建:(集合的特点是:有序,无重复) sadd set 1 2 3 4 5 6 查看: smembers set 删除元素: srem set 3 # 还剩 1 2 4 5 6 移动: sadd se ...
- 利用echarts做图表统计
以项目中的扇形统计图为例: 首先,第一步: 引入外部echarts.js文件 其次,第二步: HTML代码块 <div class="count-body-con count-tj&q ...
- [bzoj2186][Sdoi2008]沙拉公主的困惑_数论
沙拉公主的困惑 bzoj-2186 Sdoi-2008 题目大意:求N!中与M!互质的数的个数. 注释:$1\le N,M\le 10^7$. 想法:显然是求$\phi(M!)$.这东西其实只需要将数 ...
- Eclipse在Project Explorer项目归组及分模块显示
普通项目: 1.[Package Explorer]->[filter]->[Top Level Elements]->[Working Sets] 2.[Package Explo ...
- [Project]微信项目感悟
一定要先考虑好可复用部分,可以复制粘贴的地方 一定要先想好了在动 前台不同插件之间的兼容性问题可能是dom加载顺序的问题,有的代码可能要卸载其中一个插件的某个事件里
- GitLab 7.5.3 CentOS7安装和SMTP配置
CentOS 7安装GitLab还是比較简单的,依照官方文档的提示一步一步操作下来.就一个地方须要改动. 參考:GitLab安装说明 在安装好以后,执行 gitlab-ctl reconfigure ...
- 分布式设计《初尝memcached》
之前听说过高性能的分布式缓存开源工具,但一直没有真正接触过,如今接触的产品中实用到过分布式缓存.所以决定一探到底.memcached是一个优秀的开源的分布式缓存工具.也是眼下比較火热的分布 ...
- 三星抛出万亿投资计划 布局四大科技创新领域(5G、人工智能、汽车半导体、生物技术四大新兴产业)
三星近日抛出震惊世人的投资计划,未来三年将在全球范围新增投资180万亿韩元(约1万亿元人民币).新增员工4万名.这是韩国单一企业集团大规模的投资计划. 笔者获悉,三星万亿投资计划主要分两大部分,一是在 ...
- js实现原生Ajax的封装及ajax原理详解
原理及概念 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术. 动态网页:是指可以通过服务器语言结合数 ...