文档章节

镜子的Sping 之旅 之AOP

镜子哥哥
 镜子哥哥
发布于 2016/08/07 12:51
字数 694
阅读 8
收藏 0
点赞 0
评论 0

AOP术语

通知(Advice):切面的工作。(什么和何时)

5种类型:Before,After,After-returning,After-throwing,Around。

连接点(Joinpoint):应用执行过程中能够插入切面的一个点(时机)。

切点(Pointcut):定义匹配通知织入的一个或多个连接点。(何处)

切面(Aspect):通知和切点的结合, 完成功能。

引入(Introduction):向现有类添加新方法或属性。

织入(Weaving):将切面应用到代理对象来创建新的代理对象的过程。

编译期(目标类编译时AspectJ),类加载期(LTW),运行期(Spring AOP)

编写切点

Spring借助AspectJ的切点表达式(一部分,用其他的会抛出IllegalArguementException)来定义切面。

execution(* com.company.example.Example.play(..))&& within(com.company.example)

*表示不关心方法返回值类型,execution()指示器选择Example的play()方法, play(..)表示不限定入参,&&操作符表示and关系, within()限制匹配,表示example下的任意类调用时。

Spring的bean()指示器可用BeanID或者名称限制切点,也可使用!bean()。

在XML中声明切面

前置或后置通知

例子:

<aop:config>
  <aop:aspect ref=””>(ref为需要调用的bean)
<aop:before pointcut = “execution(* ..(..))” method=””/> (method为ref类中的方法)
<aop:after pointcut=”expression(* ..(..))” method=””/>
  </aop:aspect>
</aop:config>

为避免重复定义冗余,可先定义

<aop:pointcut id=”id” expression=”execution()”/>
<aop:before pointcut-ref=”id” method=“”/>
<aop:after-throwing pointcut-ref=”id” method=””/>

环绕通知

需要在通知方法中加入ProceedingJoinPoint作为方法的入参,如果需要把控制转给被通知的方法可以调用ProceedingJoinPoint的proceed()方法。

声明方法没有太大区别,只是把aop:before换成aop:around

为通知传参

在切点表达式中加入&& arg(参数),就可在<aop:before>等中加入 arg-names=”参数“调用。

通过切面引入(introduction)新功能

<aop:aspect>
<aop:declare-parents
       types-matching=”类型匹配路径”
       implement-interface=”实现接口路径”
       default-impl=”实现方法的bean路径” 或 delegate-ref=”bean id”
/>
<aop:aspect>

注解切面

在xml中更改配置

<aop:aspectj-autoproxy /> ;

在beans 中加入aop命名空间。

在类里 @Aspect 将任意类转化为切面;

@Pointcut 注解AspectJ切点表达式,下定义一个方法名,可供后续调用;

  @Pointcut(“execution(* ..)”)
  public void name(){}

@Before(“name()”)加方法;

@After @AfterReturning @AfterThrowing 使用方法同@Before

@Around(“name”)下方法中同样须使用ProcessingJoinPoint入参,并在对象中使用proceed()方法;

@DeclareParents(value=“”,default-impl=””)
 public static Interface interface;

value 等同于 type-matching,default-impl为接口实现,标注的static指定了被引入的接口。

注入AspectJ切面

可使用Spring的依赖注入将Bean装配入AspectJ切面中

<bean class=”” factory-method=”aspectOf”>
   <property name=”参数名” ref=”参数名”/>
</bean>
<bean id=”参数名” class=””>
   <peoperty name=”” …/>
</bean>

Spring 通过aspectOf()的工厂方法获得切面的引用然后像<bean>元素规定的那样依赖注入。

© 著作权归作者所有

共有 人打赏支持
镜子哥哥
粉丝 1
博文 19
码字总数 14425
作品 0
广州
spring 事务管理 1(使用spring的JdbcTemplate访问数据库)

持久层和事务的关系 dao层脱离事务也能操作数据库,事务是保证dao层数据操作的完整性(即原子性、一致性、隔离性、持久性,也即所谓的 ACID) 事务可以保证一组操作要么全成功,要么全部失败...

jiangtao ⋅ 2012/01/06 ⋅ 2

Spring进行面向切面编程的一个简单例子

一、eclipse新建java项目取名SpringTest 二、导入sping包到构建路径 还需要aspectjweaver.jar 三、创建java类(当然先要创建各种包) IHelloService.java HelloServiceImpl.java SimpleHello...

wangxuwei ⋅ 2016/01/04 ⋅ 0

在STS中SpringBoot引入AOP时,启动报错。

STS版本:3.8.1 项目pom.xml

fishinhouse ⋅ 2016/10/03 ⋅ 0

spring aop 功能初次使用(注解方式)

前期准备 spring3.0版本发布包里没有包含相应的依赖包,所以需手动加入,如下 aspectjrt.jar aspectjweaver.jar aopalliance-1.0.jar 要想使用spring aop 须配置xml文件 <?xml version="1.0...

jiangtao ⋅ 2012/01/06 ⋅ 0

SpingAOP原理小实现

简单描述Sping的AOP就是动态代理加拦截器链实现面向切面编程。当然AOP肯定没有这么简单,但是如果能自己实现AOP然后再去看源码的话是不是会更轻松点呢。 众所周知,Sping中AOP之所以能起作用...

-wangming- ⋅ 2016/03/14 ⋅ 0

推荐几个自己写的Java后端相关的范例项目(转载)

http://wosyingjun.iteye.com/blog/2312553 这里推荐几个自己写的范例项目,主要采用SSM(Spring+SpringMVC+Mybatis)框架,分布式架构采用的是(dubbo+zookeeper)。范例项目的好处是简单易...

指尖的舞者 ⋅ 2016/09/27 ⋅ 0

Quartz集成spring开发大全

一.固定xml调用quartz 准备工作: 1.导入quartz-1.x.x.x.jar到lib,可能还需要lib/sh4j-api-1.x.x.jar,log4g,sh4j.api,1,x,x,jar,sh4j.nop,1,x,x,jar 2.在src目录下创建quartz.properties......

长平狐 ⋅ 2013/01/06 ⋅ 1

spring 注解事务的问题

配置文件

jiangtao ⋅ 2012/01/11 ⋅ 2

sping 面向切面编程之引入通知

必须了解其他四个通知:Sping之aop面向切面编程通知案例 引入通知的目的就是在任意的连接点引入我想要的通知,例如前面四个通知案例的运行结果: 可以看出在被代理类Test1Service的以及方法(...

binhu ⋅ 2014/07/16 ⋅ 0

代理模式-结构型模式1

即Proxy Pattern,23种java常用设计模式之一。代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在...

凯文加内特 ⋅ 2014/02/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Hive函数

1.函数explode (一转多) create table hive_wc(sentence string); load data local inpath '/home/hadoop/data/hive-wc.txt' into table hive_wc; 结果: hive > select * from hive_wc; ......

GordonNemo ⋅ 18分钟前 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 36分钟前 ⋅ 0

使用Java connector消费ABAP系统的函数

Java Connector(JCO)环境的搭建:Step by step to download and configure JCO in your laptop 我的ABAP系统有个函数名叫ZDIS_GET_UPSELL_MATERIALS,输入一个customer ID和product ID,会输......

JerryWang_SAP ⋅ 41分钟前 ⋅ 0

IDEA提示编码速度

焦点移动 将焦点冲代码编辑窗口移动到菜单栏:Alt+菜单栏带下划线字母 将焦点从工具窗口移动到代码编辑窗口 Esc或Shift+Esc 将焦点从代码编辑移动到最近使用的工具窗口 F12 模板提示 Ctrl+J...

bithup ⋅ 53分钟前 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

python3.6 安装pyhook_3

我的是在win下的,忙了半天老是安装不了, pip install 也不行。 那么可以看出自己的版本是32bit 一脸懵逼 没办法 只好下载32版本的来安装 我一直以为 是 对应32 位的 。 下面是 小例子 http...

之渊 ⋅ 今天 ⋅ 0

004、location正则表达式

1、location的作用 location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。 2、location的语法 = 开头表示精确匹配 ^~...

北岩 ⋅ 今天 ⋅ 0

CentOS7 静默安装 Oracle 12c

环境 CentOS7.5 最小安装 数据库软件 linuxx64_12201_database.zip 操作系统配置 关闭 SELinux sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config 关闭防火墙 systemctl disable ......

Colben ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部