jdk动态代理小例子

本文通过一个简单的例子展示了Java动态代理的使用,创建了UserInvocationHandler实现InvocationHandler接口,对UserDao的save方法进行增强,在保存前后添加了自定义的日志输出。在测试类UserDaoTest中,通过Proxy.newProxyInstance创建了带增强功能的UserDao实例并执行save方法,实现了方法调用前后的额外处理。
摘要由CSDN通过智能技术生成

User.java


package domain;

public class User {

    private String userId;
    private String userName;
    private String userPwd;
    
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserPwd() {
        return userPwd;
    }
    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }
    @Override
    public String toString() {
        return "User [userId=" + userId + ", userName=" + userName
                + ", userPwd=" + userPwd + "]";
    }
}

UserDao.java

package inter;

import domain.User;

public interface UserDao {

    boolean save(User user);
    
}

UserDaoImpl.java

package inter;

import domain.User;

public class UserDaoImpl implements UserDao{

    @Override
    public boolean save(User user) {
        System.out.println("user is being saved...");
        return true;
    }
}

UserInvocationHandler.java

package jdk.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class UserInvocationHandler implements InvocationHandler{
    private Object target;
    public UserInvocationHandler(Object target){
        this.target=target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        if("save".equals(method.getName())){
            System.out.println("begin to save user...");
            Object obj =  method.invoke(target, args);
            System.out.println("user is saved...");
            return obj;
        }
        return method.invoke(target, args);
    }

}

UserDaoTest

package proxyTest;

import inter.UserDao;
import inter.UserDaoImpl;
import java.lang.reflect.Proxy;
import jdk.proxy.UserInvocationHandler;
import org.junit.Test;
import domain.User;

public class UserDaoTest {

    @Test
    public void test001(){
        UserDaoImpl udi = new UserDaoImpl();
        UserDao ud = (UserDao) Proxy.newProxyInstance(udi.getClass().getClassLoader(), udi.getClass().getInterfaces(), new UserInvocationHandler(udi));
        ud.save(new User());
    }
}

输出结果为:

begin to save user...
user is being saved...
user is saved...



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值