------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

advice 是通知
advisor 是顾问

顾问(Advisor)  

  通知Advice是Spring提供的一种切面(Aspect)。但其功能过于简单,只能将切面织入到目标类的所有目标方法中,无法完成将切面织入到指定目标方法中。

  顾问Advisor是Spring提供的另一种切面。其可以完成更为复杂的切面织入功能,能选择性的将增强切面中的部分方法。

  PointcutAdvisor是顾问的一种,可以指定具体的切入点。顾问将通知进行了包装,会根据不同的通知类型,在不同的时间点,将切面织入到不同的切入点。

  PointcutAdvisor接口有两个较为常用的实现类:
    *:NameMatchMethodPointcutAdvisor 名称匹配方法切入点顾问
    *: RegexpMethodPointcutAdvisor 正则表达式方法切入点顾问

    <property name="pattern" value=".*do.*"></property> 表示方法全名(包名,接口名,方法名)
    运算符 名称 意义
    . 点号 表示任意单个字符
    + 加号 表示前一个字符出现一次或者多次
    * 星号 表示前一个字符出现0次或者多次

    名称匹配方法切入点顾问 NameMatchMethodPointcutAdvisor
    <!-- 03.配置顾问 advisor 包装 advice-->
    <bean id="beforeAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
      <property name="advice" ref="beforeAdvice"></property>
      <property name="mappedNames" value="do*"></property>
    </bean>

名称匹配方法切入点顾问方法的案例

  一个需要增强的类:SomeServiceImpl

package cn.dawn.day15advisor01;

/**
* Created by Dawn on 2018/3/8.
*/
public class SomeServiceImpl {
public void doSome() {
System.out.println("do something");
}
public void doAny() {
System.out.println("do Any");
}
}

  增强内容的类

package cn.dawn.day15advisor01;

import org.springframework.aop.AfterReturningAdvice;

import java.lang.reflect.Method;

/**
* Created by Dawn on 2018/3/5.
*/
/*后置增强*/
public class LoggerAfter implements AfterReturningAdvice {
public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
System.out.println("===============after==================");
}
}

  配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--要增强的对象-->
<bean id="service" class="cn.dawn.day15advisor01.SomeServiceImpl"></bean>
<!--增强的内容-->
<bean id="myadvice" class="cn.dawn.day15advisor01.LoggerAfter"></bean>
<!--顾问-->
<bean id="myadvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="advice" ref="myadvice"></property>
<!--<property name="mappedNames" value="do*"></property>-->
<property name="mappedNames" value="doAny"></property>
</bean>
<!--代理工厂bean-->
<bean id="proxyfactory" class="org.springframework.aop.framework.ProxyFactoryBean">
<!--要增强的对象-->
<property name="target" ref="service"></property>
<!--增强的内容-->
<property name="interceptorNames" value="myadvisor"></property>
</bean> </beans>

  顾问的mappedNames的值可以做操作,让你想让匹配到的方法才能匹配到,可以用可以说是?通配符?的方式,类似do*或者直接写方法名doAny或者用逗号分割俩个方法dosome,doAny

  少年,你明白了吗?

  单测方法:

package cn.dawn.day15advisor01;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Created by Dawn on 2018/3/3.
*/
public class test20180305 {
@Test
/*aop代理工厂bean异常增强*/
public void t01(){
ApplicationContext context=new ClassPathXmlApplicationContext("ApplicationContext-day15advisor01.xml");
SomeServiceImpl service = (SomeServiceImpl) context.getBean("proxyfactory"); service.doSome();
service.doAny(); }
}

SSM-Spring-12:Spring中NameMatchMethodPointcutAdvisor名称匹配方法切入点顾问的更多相关文章

  1. SSM-Spring-13:Spring中RegexpMethodPointcutAdvisor正则方法切入点顾问

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- RegexpMethodPointcutAdvisor:正则方法切入点顾问 核心: <property ...

  2. SSM项目 以及 springboot 中引入swagger2的方法

    swagger2是一个非常好用的接口文档,在开发的过程中方便前后端接口的交接. 下面我们就来讲讲在使用java时,分别在SSM框架,以及springboot+mybatis框架中引入swagger2的 ...

  3. 使用Opencv中matchTemplate模板匹配方法跟踪移动目标

    模板匹配是一种在图像中定位目标的方法,通过把输入图像在实际图像上逐像素点滑动,计算特征相似性,以此来判断当前滑块图像所在位置是目标图像的概率. 在Opencv中,模板匹配定义了6种相似性对比方式: C ...

  4. C# 页面向controller中跳转匹配方法的时候,当controller中有两个重载方法时候,不发生跳转

    在ajax中的URL跳向controller一个方法时候,controller中有两个重载的方法,ajax不发生跳转,当删除另外一个方法之后,正常跳转. 不知道,是我自己写的有问题,还是control ...

  5. SSM(spring mvc+spring+mybatis)学习路径——1-2、spring事务管理

    目录 1-2 Spring事务管理 概念介绍 事务回顾 事务的API介绍 Spring 事务管理 转账案例 编程式事务管理 声明式事务管理 使用XML配置声明式事务 基于tx/aop 使用注解配置声明 ...

  6. 12 Spring Data JPA:springDataJpa的运行原理以及基本操作(下)

    spring data jpaday1:orm思想和hibernate以及jpa的概述和jpa的基本操作 day2:springdatajpa的运行原理 day2:springdatajpa的基本操作 ...

  7. spring 在service中需要抛出异常才能自动回滚

    在spring 事务配置中,如果service方法捕获了异常,则程序报错也不会自动回滚, 1.手动开启关闭事务 2.抛出异常,可以先捕获异常,然后自定义runtime异常,可不用声明

  8. 【spring data jpa】jpa中使用count计数方法

    spring data jpa中使用count计数方法很简单 直接在dao层写方法即可 int countByUidAndTenementId(String parentUid, String ten ...

  9. Spring 中参数名称解析 - ParameterNameDiscoverer

    Spring 中参数名称解析 - ParameterNameDiscoverer Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.ht ...

随机推荐

  1. NumberProgressBar开源项目学习

    1.概述 多看多学涨姿势, github真是个宝库 这个项目主要是实现数字进度条效果 github地址在https://github.com/daimajia/NumberProgressBar 感谢 ...

  2. ITU-R BT.1788建议书 对多媒体应用中视频质量的主观评估方法

    ITU-R BT.1788建议书 对多媒体应用中视频质量的主观评估方法 (ITU‑R 102/6号研究课题) (2007年) 范围 数字广播系统允许提供多媒体和数据广播应用,包括视频.音频.静态图像. ...

  3. RecyclerView添加Header和Footer

    使用过RecyclerView的同学就知道它并没有添加header和footer的方法,而ListView和GirdView都有,但是开发过程中难免有需求需要添加一个自定义的header或者foote ...

  4. cocos2D v3.x中动作回调函数的变化

    cocos2D v3.x版本中的动作的回调函数不能再带任何参数并且不能返回任何值. 官方给出的传递参数的办法是: 选择器(selector)不能带有任何形参,选择器需要的参数必须通过ivar或prop ...

  5. 使用Gradle发布SNAPSHOT版本到JCenter(oss.jfrog.org)

    回顾历史 发布SNAPSHOT版本的问题 解决问题 完整脚本 使用方法 本文原创. 转载请注明CSDN博客出处: http://blog.csdn.net/maosidiaoxian/article/ ...

  6. PS 图像调整算法——饱和度调整

    算法参考自 阿发伯 的博客. http://blog.csdn.net/maozefa 饱和度调整 图像的饱和度调整有很多方法,最简单的就是判断每个象素的R.G.B值是否大于或小于128,大于加上调整 ...

  7. 杭电ACM 1004题

    原题大概意思就是统计输入字符串中,重复的最大个数! import java.util.Scanner; public class Main { public static void main(Stri ...

  8. Docker 单主机网络

    PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 当容器逐步向容器集群,容器云技术演进的时候,一个不得不面对的问题就是各 ...

  9. sqlplus 分析执行计划

    转载 http://xm-koma.iteye.com/blog/1048451 对于oracle9i,需要手工设置plustrace角色,步骤如下: 1.在SQL>connect sys/密码 ...

  10. JavaScript,只有你想不到

    很长时间以来,JavaScript在我眼里都是编程语言中的二等公民.早先,它经常是很多安全问题的发源地,就像是胶水一样,它能把HTML应用与样式 粘到一块,可没有人拿它来正正规规地编写程序:这样的情形 ...