Spring的增强模式

一、前置增强

  1、IdoSomeService

    

  2、IdoSomeServiceImpl类实现IdoSomeService接口

    

  3、MyBeforeAdvice 实现前置增强方法

    

  4、applicationContext.xml配置文件    

<?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"
       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">

    <!--代理工厂增强-->
    <!--注入业务Bean-->
    <bean id="idoSomeService1" class="cn.spring.proxyfactory.IdoSomeServiceImpl"></bean>
    <!--增强:切面-->
    <bean id="myBeforeAdvice" class="cn.spring.proxyfactory.MyBeforeAdvice"></bean>
    <!--使用代理工厂实现增强-->
    <bean id="proxyFactory1" class="org.springframework.aop.framework.ProxyFactoryBean">
        <!--将增强和业务织入到一起-->
        <property name="target" ref="idoSomeService1"></property>
        <!--拦截增强类-->
        <property name="interceptorNames" value="myBeforeAdvice"></property>
        <!--更换代理方式    proxyTargetClass默认值为false 即JDK动态代理,但是当目标对象没有接口时,自动改为CGLIB-->
        <property name="proxyTargetClass" value="true"></property>
    </bean></beans>

  5、测试类

    

  6、控制台

    

二、环绕增强

  1、IdoSomeService

    

  2、IdoSomeServiceImpl类实现IdoSomeService接口

    

  3、MyAroundAdvice 实现环绕增强方法

    

  4、applicationContext.xml配置文件   

 <!--环绕增强实现-->
    <!--注入业务Bean-->
    <bean id="idoSomeService2" class="cn.spring.around.IdoSomeServiceImpl"></bean>
    <!--增强:切面-->
    <bean id="myAroundAdvice" class="cn.spring.around.MyAroundAdvice"></bean>
    <!--使用代理工厂实现增强-->
    <bean id="proxyFactory2" class="org.springframework.aop.framework.ProxyFactoryBean">
        <!--将增强和业务织入到一起-->
        <property name="target" ref="idoSomeService2"></property>
        <!--拦截增强类-->
        <property name="interceptorNames" value="myAroundAdvice"></property>
        <!--更换代理方式    proxyTargetClass默认值为false 即JDK动态代理,但是当目标对象没有接口时,自动改为CGLIB-->
        <property name="proxyTargetClass" value="true"></property>
    </bean>

  5、测试类

    

  

  6、控制台

    

三、异常增强 

  1、IdoSomeService

    

 

  2、IdoSomeServiceImpl类实现IdoSomeService接口

    

  

  3、MyThrowAdvice实现异常增强

    

  4、applicationContext.xml配置文件

<!--异常增强实现-->
    <!--注入业务Bean-->
    <bean id="idoSomeService3" class="cn.spring.throwadvice.IdoSomeServiceImpl"></bean>
    <!--增强:切面-->
    <bean id="myThrowAdvice" class="cn.spring.throwadvice.MyThrowAdvice"></bean>
    <!--使用代理工厂实现增强-->
    <bean id="proxyFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
        <!--将增强和业务织入到一起-->
        <property name="target" ref="idoSomeService3"></property>
        <!--拦截增强类-->
        <property name="interceptorNames" value="myThrowAdvice"></property>
        <!--更换代理方式    proxyTargetClass默认值为false 即JDK动态代理,但是当目标对象没有接口时,自动改为CGLIB-->
        <property name="proxyTargetClass" value="true"></property>
    </bean>

  5、测试类

   

  6、控制台   

   

四、最终增强

  1、IdoSomeService

    

 

  2、IdoSomeServiceImpl类实现IdoSomeService接口

    

  

  3、MyThrowAdvice实现最终增强

    

  4、applicationContext.xml配置文件

<!--最终增强实现-->
    <!--注入业务Bean-->
    <bean id="idoSomeService4" class="cn.spring.throwadvice.IdoSomeServiceImpl"></bean>
    <!--增强:切面-->
    <bean id="myThrowAdvice1" class="cn.spring.throwadvice.MyThrowAdvice"></bean>
    <aop:config>
        <aop:pointcut id="pointcut" expression="execution(* *..throwadvice.*.*(..))"/>
        <aop:aspect ref="myThrowAdvice1">
            <aop:after-throwing method="afterThrowing" throwing="ex" pointcut-ref="pointcut"></aop:after-throwing>
            <aop:after method="afterAdvice" pointcut-ref="pointcut"></aop:after>
        </aop:aspect>
    </aop:config>

  5、测试类

    

  6、控制台

   

原文地址:https://www.cnblogs.com/Zzzzn/p/11758910.html

时间: 2024-10-13 10:34:12

Spring的增强模式的相关文章

virtualbox安装增强模式

如果要使用virtualbox的共享文件,桌面分辨率放大功能,必须安装virtualbox的增强包. 本人在ubuntu下安装virtualbox,过程: [email protected]:~$ uname -a Linux huwei 3.19.0-31-generic #36~14.04.1-Ubuntu SMP Thu Oct 8 10:21:08 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux [email protected]:~$ vim /etc/

Spring 创建增强类

Spring 使用增强类定义横切逻辑,同时由于 Spring 只支持方法连接点,增强还包括在方法的哪一点加入横切代码的方位信息,所以增强既包含横切逻辑,又包含部分连接点的信息. 1.增强类型 AOP 联盟为增强定义了 org.aopalliance.aop.Advice 接口,Spring 支持5种类型的增强,先来了解一下增强接口继承关系图,如下图所示. 带 <<spring>> 标识的接口是 Spring 所定义的扩展增强接口:带 <<aoppalliance>

spring的配置模式与注解模式基础

“依赖注入”是spring的核心特征,在Web服务器(如Tomcat)加载时,它会根据Spring的配置文件中配置的bean或者是通过注解模式而扫描并装载的bean实例自动注入到ApplicationContext容器中(ApplicationContext容器管理了被注入的bean对象). 下面做两个简单测试以说明spring“依赖注入“的两种模式:配置模式与注解模式. 测试工具: 一.新建spring配置文件,放在类目录下 在“src”上右键点"new",选择"Other

spring 中单利模式的理解

一.Spring单例模式与线程安全 Spring框架里的bean,或者说组件,获取实例的时候都是默认的单例模式,这是在多线程开发的时候要尤其注意的地方. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 当多用户同时请求一个服务时,容器会给每一个请求分配一个线程,这是多个线程会并发执行该请求多对应的业务逻辑(成员方法),此时就要注意了,如果该处理逻辑中有对该单列状态的修改(体现为该单列的成员属性),则必须考虑线程同步问题

Spring中Template模式与callback的结合使用浅析

Spring不论是与ibatis,还是与Hibernate的结合中,都使用到了Template模式与callback技术,来达到简化代码实现的目的.Template模式也即模板模式,用于对一些不太变化的流程进行模板化,与callback结合,可以将变化的部分出离出来,使用callback实现.然后根据不同的情况,向template注入不同的callback.那些模板代码就没有必要重复写了.我们看下spring和ibatis的结合中,Template和callback的使用: public cla

Spring MVC -- MVC模式

对于简单的Java Web项目,我们的项目仅仅包含几个jsp页面,由于项目比较小,我们通常可以通过链接方式进行jsp页面间的跳转. 但是如果是一个中型或者大型的项目,上面那种方式就会带来许多维护困难,代码复用率低等问题.因此,我们推荐使用MVC模式. 一 MVC概念 1.什么是MVC MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范.它是用一种业务逻辑.数据与界面显示分离的方法来组织代码,将

Spring AOP增强(Advice)

Sring AOP通过PointCut来指定在那些类的那些方法上织入横切逻辑,通过Advice来指定在切点上具体做什么事情.如方法前做什么,方法后做什么,抛出异常做什么. Spring中有两种方式定义Pointcut: ·XML文件 ·注解 XML与注解方式类似,学会了一种,另外一种无难度上手. Advice接口的接口继承类: 主要可分为5类增强: ·MthodBeforeAdvice:目标方法实施前增强 ·AfterReturningAdvice:目标方法实施后增强 ·ThrowsAdvice

spring中策略模式使用

策略模式 工作中经常使用到策略模式+工厂模式,实现一个接口多种实现的灵活调用与后续代码的扩展性.在spring中使用策略模式更为简单,所有的bean均为spring容器管理,只需获取该接口的所有实现类即可. 下面以事件处理功能为例,接收到事件之后,根据事件类型调用不同的实现接口去处理.如需新增事件,只需扩展实现类即可,无需改动之前的代码.这样即做到了功能的隔离,又可防止改动原代码导致的bug. 类图 代码示例 定义接口 public interface IBaseEventService { /

5.Spring:代理模式

代理模式 为什么要学习代理模式,因为AOP的底层机制就是动态代理! 代理模式: 静态代理 动态代理 学习aop之前 , 我们要先了解一下代理模式! 静态代理 静态代理角色分析 抽象角色 : 一般使用接口或者抽象类来实现 真实角色 : 被代理的角色 代理角色 : 代理真实角色 ; 代理真实角色后 , 一般会做一些附属的操作 . 客户 : 使用代理角色来进行一些操作 . 代码实现 Rent . java 即抽象角色 //抽象角色:租房 public interface Rent { public v