• Spring中的前置增强和后置增强


    前置增强

    接口:

    /**
    * 接口
    * Created by Administrator on 2017/10/7.
    */
    public interface ISomeService {
    public void SomeService();
    }



    实现类:
    /**
    *
    * Created by Administrator on 2017/10/7.
    */
    public class SomeService implements ISomeService{
    //核心业务
    public void SomeService(){
    System.out.println("================before=================");

    }
    }


    前置通知
    import org.springframework.aop.MethodBeforeAdvice;
    import java.lang.reflect.Method;

    /**
    * Created by Administrator on 2017/10/7.
    */
    //前置通知
    public class MyBeforeAdvise implements MethodBeforeAdvice {
    public void before(Method method, Object[] objects, Object o) throws Throwable {
    System.out.println("======================前置增强=================");

    }
    }



    配置文件
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:p="http://www.springframework.org/schema/p"
    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
    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="someService" class="cn.happy.qianzhibefore.SomeService"></bean>
    <!--增强 通知-->
    <bean id="beforeadvise" class="cn.happy.qianzhibefore.MyBeforeAdvise"></bean>
    <!--aop-->
    <bean id="proxyService" class="org.springframework.aop.framework.ProxyFactoryBean">
    <!--配置需要增强的目标对象-->
    <property name="target" ref="someService"></property>
    <!--做怎么样的增强-->
    <property name="interceptorNames" value="beforeadvise"></property>
    <!--手动设置返回类型为class-->
    <property name="proxyTargetClass" value="true"></property>
    </bean>
    </beans>



    测试类
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;

    /**
    * 测试类
    * Created by Administrator on 2017/10/7.
    */
    public class Test20171007 {
    /**
    * 前置增强
    */
    @Test
    public void Test(){
    ApplicationContext context=new ClassPathXmlApplicationContext("applicationContextQianZhiBefore.xml");
    SomeService someService=(SomeService)context.getBean("proxyService");
    someService.SomeService();
    }
    }


    后置增强


    接口
    /**
    * 接口
    * Created by Administrator on 2017/10/7.
    */
    public interface ISomeService {
    public void SomeService();
    }



    实现类
    /**
    * 实现类
    * Created by Administrator on 2017/10/7.
    */
    public class SomeService implements ISomeService{
    //核心业务
    public void SomeService(){
    System.out.println("========after==========");

    }
    }

    效果图:



    后置通知
    import org.springframework.aop.AfterReturningAdvice;
    import java.lang.reflect.Method;

    /**
    * 后置增强
    * Created by Administrator on 2017/10/7.
    */
    public class MyAfterAdvise 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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:p="http://www.springframework.org/schema/p"
    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
    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="someService" class="cn.happy.houzhiafter.SomeService"></bean>
    <!--增强 通知-->
    <bean id="afteradvise" class="cn.happy.houzhiafter.MyAfterAdvise"></bean>
    <!--aop-->
    <bean id="proxyService" class="org.springframework.aop.framework.ProxyFactoryBean">
    <!--配置需要增强的目标对象-->
    <property name="target" ref="someService"></property>
    <!--做怎么样的增强-->
    <property name="interceptorNames" value="afteradvise"></property>
    </bean>

    </beans>




    测试类
    /**
    * 后置增强
    */
    @Test
    public void Test(){
    ApplicationContext context=new ClassPathXmlApplicationContext("applicationContextQianZhiAfter.xml");
    ISomeService someService=(ISomeService)context.getBean("proxyService");
    someService.SomeService();
    }



    效果图:

    
    







  • 相关阅读:
    gulp打包js/css时合并成一个文件时的顺序解决
    gulp错误GulpUglifyError: unable to minify JavaScript解决
    日志平台中心建议
    Spring Boot整合Quartz实现定时任务表配置
    阿里云Centos7使用yum安装MySQL5.6的正确姿势
    Servlet、Filter
    Android java.lang.IllegalArgumentException: Object returned from onCreateLoader must not be a non-static inn
    Android中CursorLoader的使用、原理及注意事项
    Android LoaderManager与CursorLoader用法
    Android 用SQLite 使用 CursorLoader 中的数据填充列表视图
  • 原文地址:https://www.cnblogs.com/sujulin/p/7656077.html
Copyright © 2020-2023  润新知