Spring 顾问

1.名称匹配方法切入点顾问

接口:ISomeService

public interface ISomeService {
    public void doSome();

    public void doSecont();

}

public class MyBeforeAdvise implements MethodBeforeAdvice {

    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("==========log==========");

    }
}
public class SomeService implements ISomeService {
    //核心业务
    public void doSome() {
        System.out.println("拜托别让他一番努力换来是奢求!");
    }

    public void doSecont() {
        System.out.println("=================Secont================");

    }

}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--前置通知 名称匹配方法切入点顾问-->
    <!--01.目标对象-->
    <bean id="someService" class="cn.happy.spring08aop_Advice.SomeService"></bean>
    <!--02.前置增强(通知)-->
    <bean id="beforeAdvice" class="cn.happy.spring08aop_Advice.MyBeforeAdvise"></bean>

    <!--02.前置增强(顾问)-->
    <bean id="beforeAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
        <property name="advice" ref="beforeAdvice"></property>
        <property name="mappedNames" value="beforeAdvisor"></property>
    </bean>
    <!--03.aop-->
    <bean id="proxyService" class="org.springframework.aop.framework.ProxyFactoryBean">
        <!--配置需要增强的目标对象-->
        <property name="target" ref="someService"></property>

        <property name="interceptorNames" value="beforeAdvice"></property>
        <property name="proxyTargetClass" value="true"></property>
    </bean>
</beans>

单测

//1.前置通知 名称匹配方法切入点顾问
    @Test
    public void test01(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext05_aop05_Advice.xml");
        ISomeService service = (ISomeService) ctx.getBean("proxyService");
        service.doSome();
        service.doSecont();
    }

2.正则表达式 匹配方法切入点顾问

接口:ISomeService

public interface ISomeService {
    public void doSome();

    public void doSecont();
}

public class MyBeforeAdvise implements MethodBeforeAdvice {

    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("==========log==========");

    }
}
public class SomeService implements ISomeService {
    //核心业务
    public void doSome() {
        System.out.println("拜托别让他一番努力换来是奢求!");
    }

    public void doSecont() {
        System.out.println("++===================Secont====================++");

    }

}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--正则表达式 匹配方法切入点顾问-->
    <!--01.目标对象-->
    <bean id="someService" class="cn.happy.spring09aop_AdviceZenz.SomeService"></bean>
    <!--02.前置增强(通知)-->
    <bean id="beforeAdvice" class="cn.happy.spring09aop_AdviceZenz.MyBeforeAdvise"></bean>

    <!--02.前置增强(顾问)-->
    <bean id="beforeAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
        <property name="advice" ref="beforeAdvice"></property>
        <property name="pattern" value=".*d.*"></property>
    </bean>
    <!--03.aop-->
    <bean id="proxyService" class="org.springframework.aop.framework.ProxyFactoryBean">
        <!--配置需要增强的目标对象-->
        <property name="target" ref="someService"></property>

        <property name="interceptorNames" value="beforeAdvisor"></property>

    </bean>
</beans>

单测

 //2.正则表达式 匹配方法切入点顾问
    @Test
    public void test02(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext06_aop06_Zenz.xml");
        ISomeService service = (ISomeService) ctx.getBean("proxyService");
        service.doSome();
        service.doSecont();
    }
时间: 2025-01-07 08:00:00

Spring 顾问的相关文章

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

一.顾问 通知的一种表现方式(顾问包装通知/增强) Advisor: 名称匹配方法: NameMecthMethodPointcutAdvisor 1.定义了一个业务类 package cn.spring.advisor; /** * 业务接口 */ public interface IService { //业务方法 public void doSome(); public void say(); } 2.定义里一个增强类,实现了增强接口 package cn.spring.advisor;

SSM-Spring-12:Spring中NameMatchMethodPointcutAdvisor名称匹配方法切入点顾问

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- advice 是通知advisor 是顾问 顾问(Advisor) 通知Advice是Spring提供的一种切面(Aspect).但其功能过于简单,只能将切面织入到目标类的所有目标方法中,无法完成将切面织入到指定目标方法中. 顾问Advisor是Spring提供的另一种切面.其可以完成更为复杂的切面织入功能,能选择性的将增强切面中的部分方法. PointcutAdvisor是顾问的一种,可以指定具体的切入点

Spring(七)Spring中的四种增强和顾问

Spring中的四种增强有那四种? 前置增强    后置增强  环绕增强  异常增强 先编写接口和实体类  ISomeService和SomeServiceImpl package demo10; /** * Created by mycom on 2018/3/8. */ public interface ISomeService { public void doSome(); } package demo10; /** * Created by mycom on 2018/3/8. */ p

Spring(十)--Advisor顾问

Spring之Advisor顾问 1. 创建新的xml文件  advisor.xml <!--01. 配置目标对象 实际肯定是配置UserServiceImpl--> <bean id="userDaoImpl" class="com.xdf.dao.UserDaoImpl"/> <!--02.配置前置通知--> <bean id="beforeAdvice" class="com.xdf.ad

Spring通知,顾问,增强

1.AOP  (Aspect  Oriented Programming  面向切面编程) 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. 面向

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

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- RegexpMethodPointcutAdvisor:正则方法切入点顾问 核心: <property name="pattern" value=".*do.*"></property> 表示方法全名(包名,接口名,方法名) 运算符 名称 意义 .   点号   表示任意单个字符 +   加号 表示前一个字符出现一次或者多次 *   星号 表示前一个字符

Spring整合MyBatis

首先下载jar包  mybatis-spring.jar 原因spring3.0出来的早,MyBatis3.0晚,意味着Spring不愿意去在一个没有做出发布版本的MyBatis上做过多的设置.所以,最终jar包提供者第三方. <!--Mybatis+Spring整合--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId&g

【Spring】@Transactional解释 (转)

Spring是当今广泛使用的框架,为Java核心堆栈带来了许多强大的功能和扩展.然而,大多数人倾向于使用这些功能,而不了解其潜在的机制. 由于现实生活中没有"魔法",我们将在这一系列文章中深入研究与事务和数据库相关的一些Spring功能. 第一篇文章是处理着名的@Transactional注释,为开发者节省了管理低级别事务代码的负担. 第二篇文章可以在这里:Spring @ PersistenceContext / @ PersistenceUnit解释 注意:以下代码分析使用Spri

Spring和Mybatis的整合

复习之前的事物Properties 事务: 数据库四种隔离级别1.读未提交 Read_Uncommitted2.读已经提交 Read_committed3.可重复读 Repeatable_read4.串行化 Serializable 1.这三个jar包是必须有的 要想整合这两个模块就准备的材料 大配置中的头文件 <dependency>  <groupId>org.mybatis</groupId>  <artifactId>mybatis-spring&l