`
youyu4
  • 浏览: 442673 次
社区版块
存档分类
最新评论

Spring AOP 之CGLIB实例

 
阅读更多

Spring AOP 之CGLIB实例

 

使用的是CGLIB代理

 

      1. Advice类要实现MethodInterceptor接口

      2. 要自己定义一个代理工厂,用于配置target和Advice

 

 

业务类

package com.yeepay.porxy.cglib.test;

import java.util.HashMap;
import java.util.Map;

/**
 * 目标类,(委托类)
 * @author shangxiaofei
 *
 */
public class PaymentServer {

    public Map<String, String> payMoney(String name,Integer money){
        System.out.println("paymentServer.payMoney()付钱=========>名字【"+name+"】,money=【"+money+"】");
        Map<String, String> map=new HashMap<String, String>();
        map.put("result", "已经完成付钱");
        return map;
    }
}

 

Advice类

package com.yeepay.porxy.cglib.test;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
/**
 * 增强类
 * @author shangxiaofei
 *
 */
public class PoxyForService implements MethodInterceptor{

    @Override
    public Object intercept(Object arg0, Method arg1, Object[] arg2,MethodProxy arg3) throws Throwable {
          // 增强功能的代码
        System.out.println("PoxyForService.intercept(方法执行前执行========>向统计发送消息)");
        if(arg2!=null&&arg2.length>0){
            for(int i=0;i<arg2.length;i++){
                System.out.println("PoxyForService.intercept()发送的参数内容====>"+arg2[i]);
            }
        }
        
        
        //执行方法内容
        Object object=arg3.invokeSuper(arg0, arg2);
        
        
        System.out.println("PoxyForService.intercept(方法执行后执行=======>计算时间)");
        return object;
    }
    
    

}

 

代理的工厂类

package com.yeepay.porxy.cglib.test;

import net.sf.cglib.proxy.Enhancer;

/**
 * 代理实现工厂类
 * @author shangxiaofei
 *
 */
public class PoxyFactory {
     public static PaymentServer getPaymentServer(){
         // Cglib 核心类,生成代理对象
        Enhancer enhancer= new Enhancer();
         // 为核心类对象中放入需要代理的委托类的类对象
        enhancer.setSuperclass(PaymentServer.class);
         // 为核心类对象中放入增强功能的类对象
        enhancer.setCallback(new PoxyForService());
         // 从核心类对象中获取委托类的代理对象
        Object object=enhancer.create();
        
        return (PaymentServer) object;
     }
}

 

测试类

package com.yeepay.porxy.cglib.test;

import java.util.Map;
/**
 * 测试类
 * @author shangxiaofei
 *
 */
public class TestController {

    private PaymentServer paymentServer=PoxyFactory.getPaymentServer();
    
    public void payment(){
        System.out.println("TestController.payment()开始");
        Map<String, String> map=paymentServer.payMoney("怪物雷克", 100);
        System.out.println("TestController.payment()结束===>"+map.get("result"));
    }
    
    
    /**
     * TestController.payment()开始
     * PoxyForService.intercept(方法执行前执行========>向统计发送消息)
     * PoxyForService.intercept()发送的参数内容====>怪物雷克
     * PoxyForService.intercept()发送的参数内容====>100
     * paymentServer.payMoney()付钱=========>名字【怪物雷克】,money=【100】
     * PoxyForService.intercept(方法执行后执行=======>计算时间)
     * TestController.payment()结束===>已经完成付钱
     * @param args
     */
    public static void main(String[] args) {
        TestController testController=new TestController();
        testController.payment();
    }
}

 

 

分享到:
评论

相关推荐

    简单spring aop 例子

    1. **代理**:Spring AOP支持两种类型的代理:JDK动态代理和CGLIB代理。JDK代理用于实现了接口的类,而CGLIB代理则用于没有接口或不希望使用接口的类。代理对象在调用目标方法时会执行切面逻辑。 2. **织入**:织入...

    spring-aop实例

    通过以上介绍,我们可以看到Spring AOP的强大之处在于它简化了代码的组织和维护,使得横切关注点的实现更加优雅。了解并掌握这些概念,开发者可以有效地利用Spring AOP提升应用程序的可维护性和可扩展性。

    Spring Aop使用实例

    **Spring AOP 使用实例** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它提供了一种在不修改原有代码的情况下,通过代理方式添加额外功能的技术。这种技术使得我们...

    spring 应用aop 实例

    本实例将深入探讨如何在Spring 4.0版本中实现AOP。 首先,AOP的核心概念包括切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点(Pointcut)和织入(Weaving)。切面是AOP中的一个模块,包含了一组相关...

    spring_aop_拦截实例

    本实例主要探讨如何在Spring AOP中实现拦截器。 首先,我们来理解Spring AOP的基本概念。AOP的核心是代理,Spring提供了两种代理方式:JDK动态代理和CGLIB代理。JDK动态代理基于接口,当目标对象实现了接口时使用;...

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    如果被代理的类没有实现接口,Spring AOP会采用CGLIB来生成代理对象。CGLIB(Code Generation Library)是一个开源的代码生成库,它允许运行时在内存中动态生成类和对象。 在Spring AOP中,我们通常使用@Aspect注解...

    spring aop学习实例

    **Spring AOP学习实例** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP允许开发者定义“切面”...

    spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.ja及ck-2.5.1.jar

    CGLIB是一个强大的高性能的代码生成库,它在许多AOP(面向切面编程)的实现中被使用,比如Spring AOP。CGLIB通过字节码操作技术,在运行时动态创建子类并增强方法。在Spring中,当目标对象不支持代理(如final类)...

    spring AOP 引入jar包,spring IOC 引入Jar包

    5. **代理(Proxy)**:Spring AOP 使用动态代理技术创建对象,有两种代理方式:JDK 动态代理和 CGLIB 代理。前者适用于接口实现类,后者适用于没有接口的类。 6. **注解使用**:如 @Aspect、@Before、@After、@...

    springAop默认代理方式.zip

    2. **动态代理**:Spring AOP 的默认代理方式是动态代理,它包括JDK动态代理和CGLIB代理。当目标对象实现了至少一个接口时,Spring将使用JDK的动态代理机制。JDK动态代理通过实现InvocationHandler接口,并在运行时...

    spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.jar

    在Spring中,动态代理是实现AOP(面向切面编程)的核心技术之一。CGLIB和Java的内置JDK动态代理是两种常用的动态代理方式。当目标类实现了接口时,Spring会选择JDK动态代理,通过反射机制创建代理对象;反之,如果...

    Spring AOP编程实例

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的核心特性之一,它提供了一种在不修改原有代码的情况下,通过插入额外的行为(如日志、事务管理等)来增强功能的方式。AOP允许程序员定义“切...

    spring aop小实例

    在IT行业中,Spring框架是Java企业级应用开发的首选框架,而Spring AOP(面向切面编程)则是其核心特性之一。AOP提供了一种在不修改代码的情况下,对现有程序进行扩展和增强的能力,主要应用于日志记录、事务管理、...

    Spring AOP实例

    Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的一个重要组成部分。它提供了一种模块化和声明式的方式来处理系统中的交叉关注点,如日志、事务管理、性能监控等,从而使得业务代码...

    SpringAOP.zip

    Spring AOP,全称为Aspect Oriented Programming,是Spring框架中的一个重要模块,主要负责处理系统中的...文件"5.SpringAOP_01"和"6.SpringAOP_02"很可能是课程的分阶段内容,涵盖了从基础概念到进阶实践的详细讲解。

    springioc和spring aop

    Spring通过反射机制来实现这一过程,比如在上述的`TestIOC`例子中,Spring能够根据类名动态地创建对象,并通过setter方法注入属性值,实现了对象的实例化和配置。 **依赖注入(DI)**有多种实现方式,包括构造器...

    基于java的企业级应用开发:Spring AOP简介.ppt

    **Spring AOP 简介** 面向切面编程(AOP),全称为 Aspect-Oriented Programming,是一种编程范式,旨在解决传统面向对象编程(OOP)中的代码重复和分散问题。在OOP中,诸如事务管理、日志记录等功能往往会分散在多...

    Spring AOP 入门实例1

    **Spring AOP 入门实例1** 在Java开发中,Spring框架因其强大的功能和灵活性而备受推崇,其中Spring AOP(Aspect Oriented Programming,面向切面编程)是其重要组成部分。AOP允许开发者定义“切面”,这些切面可以...

Global site tag (gtag.js) - Google Analytics