Spring——顾问封装通知
通知(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——顾问封装通知的更多相关文章
- spring顾问包装通知
		前边说到了顾问就是通知,没有实践,这里就实践一下,证明一下. 虽然可以说顾问就是通知,但是他们还是有的一定的区别的,通知是将目标类中所有的方法都进行的增强,而顾问却可以指定到特定的方法上,也就是说顾问 ... 
- Spring中的通知(Advice)和顾问(Advisor)
		在Spring中,目前我学习了几种增强的方式,和大家分享一下 之前的话: 1.AOP (Aspect Oriented Programming 面向切面编程) 在软件业,AOP为Aspect O ... 
- Spring笔记07(Spring AOP的通知advice和顾问advisor)
		1.Spring AOP的通知advice 01.接口代码: package cn.pb.dao; public interface UserDao { //主业务 String add(); //主 ... 
- Spring顾问、IOC注解和注解增强
		一.顾问 通知的一种表现方式(顾问包装通知/增强) Advisor: 名称匹配方法: NameMecthMethodPointcutAdvisor 1.定义了一个业务类 package cn.spri ... 
- 事务框架之声明事务(自动开启,自动提交,自动回滚)Spring AOP 封装
		利用Spring AOP 封装事务类,自己的在方法前begin 事务,完成后提交事务,有异常回滚事务 比起之前的编程式事务,AOP将事务的开启与提交写在了环绕通知里面,回滚写在异常通知里面,找到指定的 ... 
- spring aop 环绕通知around和其他通知的区别
		前言: spring 的环绕通知和前置通知,后置通知有着很大的区别,主要有两个重要的区别: 1) 目标方法的调用由环绕通知决定,即你可以决定是否调用目标方法,而前置和后置通知 是不能决定的,他们只 ... 
- Spring AOP 四大通知
		Spring AOP 四大通知 Spring 3.X 以前 1.前置通知,实现 MethodBeforeAdvice 接口,重写 public void before(Method metho ... 
- SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装
		SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装 >>>>>>>& ... 
- [转载]  spring aop 环绕通知around和其他通知的区别
		前言: spring 的环绕通知和前置通知,后置通知有着很大的区别,主要有两个重要的区别: 1) 目标方法的调用由环绕通知决定,即你可以决定是否调用目标方法,而前置和后置通知 是不能决定的,他们只 ... 
随机推荐
- Java EE  HttpServletRequest接口和HttpServletResponse接口
			package javax.servlet.http (https://docs.oracle.com/javaee/7/api/javax/servlet/http/package-summary. ... 
- R语言学习笔记:读取前n行数据
			常规读取 一般我们读取文件时都会读取全部的文件然后再进行操作,因为R是基于内存进行计算的. data <- read.table("C:\\Users\\Hider\\Desktop\ ... 
- Oracle学习笔记:一个简单的行转列例子
			一个简单的行列转换例子,原始数据. create table temp_cwh_student ( name ), subject ), score ) ) select * from temp_cw ... 
- mac下MySQL出现乱码的解决方法
			之前写过一篇Linux下MySQL出现乱码的解决方法,本文说下mac下的处理,其实处理方式是一样的,我电脑的mysql版本是5.7.26-log 网上很多帖子都说去/usr/local/mysql/s ... 
- java指定运行jar包中的其中一个main方法
			java -cp jar包 类名 java -cp ******.jar com.******.EsEtl 
- mybatis-04【小结】
			mybatis-04[小结] 1.Mybatis 中 # 和 $ 的区别?#相当于对数据 加上 双引号,$相当于直接显示数据1)#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号. 如:o ... 
- python函数:装饰器、修正、语法糖、有参装饰器、global与nonlocal
			一.装饰器 二.装饰器修正1 三.装饰器修正2 四.装饰器的语法糖 五.有参.无参装饰器 六.global与nonlocal 一.装饰器 ''' 1 什么是装饰器 器=>工具 装饰=>指的 ... 
- 8.JVM技术_JVM参数列表
			1.JVM参数列表 通常情况下启动一个Java应用程序就会启动JVM的虚拟机,虚拟机在启动时可以通过java 指令传递参数给JVM. java -Xmx3550m -Xms3550m -Xmn2g - ... 
- maven报错 java.lang.RuntimeException: com.google.inject.CreationException: Unable to create injector, see the following errors
			2 errors java.lang.RuntimeException: com.google.inject.CreationException: Unable to create injector, ... 
- Hive压缩和存储(十二)
			压缩和存储 1. Hadoop压缩配置 1) MR支持的压缩编码 压缩格式 工具 算法 文件扩展名 是否可切分 DEFAULT 无 DEFAULT .deflate 否 Gzip gzip DEFAU ... 
