设计模式之jdk动态代理

设计模式有23种,代理模式只是其中的一种,代理模式又分为jdk动态代理和cglib动态代理。

接口怎么实现一个bean,使用代理模式实现。

下面我就详细的用代码实现jdk动态代理。

  1. 首先创建一个被代理类

    public class UserServiceImpl implements UserService{
        @Override
        public String showLog(Long id) {
            System.out.println("输出:"+id);
            return "输出了"+id;
        }
    }
    
    public interface UserService {
    String showLog(Long id);
    }
    
  2. 创建代理类

    //InvocationHandler这是一个接口,通过他使被代理类的方法得到执行
    public class JdkProxy implements InvocationHandler {
    
    private Object object;
    
    public JdkProxy(Object object) {
        this.object = object;
    }
    
    public JdkProxy() {
    }
    
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    	        System.out.println("张三");
    	        /*这一步就是实现代理类调用被代理类的方法,在前面打印日志就可以在不动类的情况下实现其日志的打印,这也是AOP的底层原理*/
    	        Object invoke = method.invoke(object, args);
    	        return invoke;
    	  }
    }
    
  3. 创建测试类

    @RestController
    public class Test1Controller {
    
    @GetMapping("/getMessage/{id}")
    public String getExceptionMessage(@PathVariable("id")Integer id){
    	//被代理类创建对象
        UserServiceImpl userService = new UserServiceImpl();
        //代理类创建对象,将被代理类的对象放入其中
        JdkProxy jdkProxy = new JdkProxy(userService);
        /*使用反射的方法,将被被代理类的类加载器,接口,InvocationHandler放入其中就可以实现类的代理*/
        UserService u = (UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader()
                , userService.getClass().getInterfaces(),
                jdkProxy);
        String s = u.showLog(Long.valueOf(id));
        return s;
    
    }
    }
    

如果有不太清楚的地方,欢迎在下方评论说出你的问题,我会及时解答。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值