通知(advice)是Spring中的一种比较简单的切面,只能将切面织入到目标类的所有方法中,而无法对指定方法进行增强

顾问(advisor)是Spring提供的另外一种切面,可以织入到指定的方法中   接口 PointcutAdvisor

  实现类:

    NameMatchMethodPointcutAdvisor(名称匹配方法切入点顾问),

    RegexpMethodPointcutAdvice(正则匹配切入点顾问)

一、名称匹配方法切入点顾问

  1.接口及其实现类

public void doSome();
public void doSome() {
        System.out.println("123");
    }

  2.增强类

public class BeaforeAdvisor implements MethodBeforeAdvice {
    @Override
    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("前置==========");
    }
}

  3.大配置文件

  <!--目标对象注入--><bean id="proServiceimpl" class="cn.spring.advisor.ProServiceImpl"></bean>
<!--增强类注入-->
    <bean id="beaforeAdvisor" class="cn.spring.advisor.BeaforeAdvisor"></bean>
<!--顾问-->
    <bean id="advisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor" >
        <property name="advice" ref="beaforeAdvisor"></property>
        <property name="mappedNames" value="doSome"></property>
    </bean>
<!--使用代理工厂-->
    <bean id="ProFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="target" ref="proServiceimpl"></property>
        <property name="interceptorNames" value="advisor"></property>
    </bean>

二、正则匹配的切入点顾问

<!--目标对象注入-->
<bean id="proServiceimpl" class="cn.spring.advisor.ProServiceImpl"></bean>
<!--增强类注入-->
    <bean id="beaforeAdvisor" class="cn.spring.advisor.BeaforeAdvisor"></bean>
<!--顾问-->
<bean id="advisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" >
        <property name="advice" ref="beaforeAdvisor"></property>
       <property name="pattern" value=".*do.*"></property>
    </bean>
<!--使用代理工厂-->
    <bean id="ProFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="target" ref="proServiceimpl"></property>
        <property name="interceptorNames" value="advisor"></property>
    </bean>

三、顾问的自动代理

  顾问代理生成器,当我们声明好顾问后为目标对象生成代理对象。如果项目中 存在多个代理对象的话,需要实例化许多的ProxyFactoryBean,我们可以使用顾问代理生成器来解决这个问题。

顾问代理生成器主要分两种

  • 默认顾问代理生成器:DefaultAdvisorAutoProxyCreator
  • 名称顾问代理生成器:BeanNameAutoProxyCreator

  1.默认顾问自动代理生成器

 <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean>

  2.名称顾问代理生成器

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><!--指定目标对象进行织入  多个对象用,分割-->
        <property name="beanNames" value="proServiceimpl,beanTest"></property><!--指定顾问-->     <property name="interceptorNames" value="advisor"></property>
</bean>

Spring——顾问封装通知的更多相关文章

  1. spring顾问包装通知

    前边说到了顾问就是通知,没有实践,这里就实践一下,证明一下. 虽然可以说顾问就是通知,但是他们还是有的一定的区别的,通知是将目标类中所有的方法都进行的增强,而顾问却可以指定到特定的方法上,也就是说顾问 ...

  2. Spring中的通知(Advice)和顾问(Advisor)

    在Spring中,目前我学习了几种增强的方式,和大家分享一下 之前的话: 1.AOP  (Aspect  Oriented Programming  面向切面编程) 在软件业,AOP为Aspect O ...

  3. Spring笔记07(Spring AOP的通知advice和顾问advisor)

    1.Spring AOP的通知advice 01.接口代码: package cn.pb.dao; public interface UserDao { //主业务 String add(); //主 ...

  4. Spring顾问、IOC注解和注解增强

    一.顾问 通知的一种表现方式(顾问包装通知/增强) Advisor: 名称匹配方法: NameMecthMethodPointcutAdvisor 1.定义了一个业务类 package cn.spri ...

  5. 事务框架之声明事务(自动开启,自动提交,自动回滚)Spring AOP 封装

    利用Spring AOP 封装事务类,自己的在方法前begin 事务,完成后提交事务,有异常回滚事务 比起之前的编程式事务,AOP将事务的开启与提交写在了环绕通知里面,回滚写在异常通知里面,找到指定的 ...

  6. spring aop 环绕通知around和其他通知的区别

    前言: spring 的环绕通知和前置通知,后置通知有着很大的区别,主要有两个重要的区别: 1) 目标方法的调用由环绕通知决定,即你可以决定是否调用目标方法,而前置和后置通知   是不能决定的,他们只 ...

  7. Spring AOP 四大通知

    Spring AOP 四大通知 Spring 3.X 以前 1.前置通知,实现  MethodBeforeAdvice 接口,重写 public  void  before(Method  metho ...

  8. SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装

    SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装 >>>>>>>& ...

  9. [转载] spring aop 环绕通知around和其他通知的区别

    前言: spring 的环绕通知和前置通知,后置通知有着很大的区别,主要有两个重要的区别: 1) 目标方法的调用由环绕通知决定,即你可以决定是否调用目标方法,而前置和后置通知   是不能决定的,他们只 ...

随机推荐

  1. 什么是IOC和什么是AOP,依赖注入(DI)和Ninject,Ninject

    我们所需要的是,在一个类内部,不通过创建对象的实例而能够获得某个实现了公开接口的对象的引用.这种“需要”,就称为DI(依赖注入,Dependency Injection),和所谓的IoC(控制反转,I ...

  2. python之项目依赖管理

    生成所有依赖清单 requirements.txt 1.  pipreqs 工具 安装) pip install pipreqs 执行生成依赖列表命令) pipreqs ./ 完善版本: pipreq ...

  3. [CSS] w3c 盒模型 和 IE 盒模型

  4. Solr集群的搭建概述(非教程)

    1.什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候是不 ...

  5. Hadoop2.7.3集群安装scala-2.12.8 和spark2.7

    Apache Spark™是用于大规模数据处理的统一分析引擎. 从右侧最后一条新闻看,Spark也用于AI人工智能 spark是一个实现快速通用的集群计算平台.它是由加州大学伯克利分校AMP实验室 开 ...

  6. 移动端h5+vue失焦搜索,ios和android兼容问题

    html部分: <input type="search" :placeholder="placeholder" v-model="searchN ...

  7. Java反射【三、方法的反射】

    获取一个类下的所有方法 可以获取类类型后,获取到所有方法及相关信息 Method[] ms = c.getMethods(); 获取方法列表(public) Method[] ms = c.getDe ...

  8. Linux :ssh sftp scp

    SSH 概述 1 SSH协议,Secure Shell ,为客户提供安全的shel环境,默认端口22 OpenSSH服务 服务名称:sshd 主程序:/usr/bin/sshd    /usr/bin ...

  9. linux 重定向类型 超级块 i节点

    超级块:定义文件系统的元数据(总大小.块大小.空闲.......):在格式化的时候确定 查看超级块信息:tune2fs  -l   目录 i节点:定义文件的元数据(名称.大小.存放位置.权限.修改时间 ...

  10. 代码检查工具sonarqube介绍

    SonarQube 是一款用于代码质量管理的开源工具,它主要用于管理源代码的质量.通过插件形式,可以支持众多计算机语言. 比如 java, C#, go,C/C++, PL/SQL,Cobol,Jav ...