Spring动态代理封装成工具类使用-----Spring框架

package com.powernode.proxy.client;

import com.powernode.proxy.Spring6Config;
import com.powernode.proxy.service.OrderService;
import com.powernode.proxy.service.impl.OrderServiceImpl;
import com.powernode.proxy.util.ProxyUtil;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Client
{
    public static void main(String[] args)
    {
        //创建目标对象
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Spring6Config.class);
        OrderService orderService = context.getBean("orderServiceImpl", OrderServiceImpl.class);
        //创建代理对象
        //类加载器,代理类要实现的接口,调用处理器.var返回对象即代理对象
        //newProxyInstance新建代理对象实例
        //本质上,这newProxyInstance()方法执行,在内存中动态生成了代理类的字节码,new了一个对象出来
        //第一个参数 Classloader loader类加载器(代理类的类加载器必须得和被代理对象的类加载器一样)
        //内存当中生成的字节码也是class文件,要执行也必须加载到内存中,加载类就需要类加载器,JDK要求目标类和代理类的加载器必须一样
        //第二个参数 Class<?> interface代理类要实现的接口
        //代理类和目标类要实现同一个接口或同一些接口,要通知JDK我们实现了什么接口,在内存中生成代理类的时候,需要告知实现了那些接口
        //第三个参数 InvocationHandler handler调用处理器,是一个接口
        //因为具体要增强什么代码,卸载调用处理器接口中写增强代码
        Object o = ProxyUtil.newProxyInstance(orderService);
        //调用代理对象的代理方法
        //之所以我们可以向下转型,因为我们实现了相同的接口
        OrderService OS = (OrderService)o;
        //调用代理对象的代理方法,如果是增强的话,目标对象的目标方法需要执行
        OS.generate();
        OS.Modify();
        OS.detail();
        String name = OS.getName();
        System.out.println(name);
    }
}
package com.powernode.proxy.client;

import com.powernode.proxy.Spring6Config;
import com.powernode.proxy.service.OrderService;
import com.powernode.proxy.service.impl.OrderServiceImpl;
import com.powernode.proxy.util.ProxyUtil;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Client
{
    public static void main(String[] args)
    {
        //创建目标对象
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Spring6Config.class);
        OrderService orderService = context.getBean("orderServiceImpl", OrderServiceImpl.class);
        //创建代理对象
        //类加载器,代理类要实现的接口,调用处理器.var返回对象即代理对象
        //newProxyInstance新建代理对象实例
        //本质上,这newProxyInstance()方法执行,在内存中动态生成了代理类的字节码,new了一个对象出来
        //第一个参数 Classloader loader类加载器(代理类的类加载器必须得和被代理对象的类加载器一样)
        //内存当中生成的字节码也是class文件,要执行也必须加载到内存中,加载类就需要类加载器,JDK要求目标类和代理类的加载器必须一样
        //第二个参数 Class<?> interface代理类要实现的接口
        //代理类和目标类要实现同一个接口或同一些接口,要通知JDK我们实现了什么接口,在内存中生成代理类的时候,需要告知实现了那些接口
        //第三个参数 InvocationHandler handler调用处理器,是一个接口
        //因为具体要增强什么代码,卸载调用处理器接口中写增强代码
        Object o = ProxyUtil.newProxyInstance(orderService);
        //调用代理对象的代理方法
        //之所以我们可以向下转型,因为我们实现了相同的接口
        OrderService OS = (OrderService)o;
        //调用代理对象的代理方法,如果是增强的话,目标对象的目标方法需要执行
        OS.generate();
        OS.Modify();
        OS.detail();
        String name = OS.getName();
        System.out.println(name);
    }
}
package com.powernode.proxy.util;

import com.powernode.proxy.service.TimerInvocationHandler;

import java.lang.reflect.Proxy;

public class ProxyUtil
{
    //封装一个工具方法返回Object
    public static Object newProxyInstance(Object obj)
    {
        Object o = Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new TimerInvocationHandler(obj));
        return o;
    }
}
package com.powernode.proxy.util;

import com.powernode.proxy.service.TimerInvocationHandler;

import java.lang.reflect.Proxy;

public class ProxyUtil
{
    //封装一个工具方法返回Object
    public static Object newProxyInstance(Object obj)
    {
        Object o = Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new TimerInvocationHandler(obj));
        return o;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值