package vo;
public class User {
private int id;
private String username;
private String password;
public User(){
System.out.println("user对象创建成功");
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
UserDao.java
package dao;
import vo.User;
public interface UserDAO {
void insert(User user);
void test();
}
TaskDao.java
package dao;
public interface TaskDAO {
void delete(String tid);
}
TaskDaoImpl.java
package dao.imp;
import dao.TaskDAO;
public class TaskDAOIMP implements TaskDAO {
@Override
public void delete(String tid) {
System.out.println("删除任务");
}
}
UserDaoImpl:
package dao.imp;
import vo.User;
import dao.UserDAO;
public class UserDAOIMP implements UserDAO {
@Override
public void insert(User user) {
System.out.println("UserDAOIMP的insert(user)方法被调用");
}
@Override
public void test() {
System.out.println("UserDAOIMP的test()方法被调用");
}
}
Test.java
package test;
import java.lang.reflect.Proxy;
import proxy.DynaProxy;
import dao.TaskDAO;
import dao.UserDAO;
import dao.imp.TaskDAOIMP;
import dao.imp.UserDAOIMP;
public class Test {
public static void main(String[] args) {
UserDAOIMP userDAOIMP = new UserDAOIMP();
UserDAO userDAO = (UserDAO)new DynaProxy().createOject(userDAOIMP);
userDAO.test();
System.out.println("*************************");
TaskDAO taskDAO = (TaskDAO)new DynaProxy().createOject(new TaskDAOIMP());
taskDAO.delete("1");
}
}
package com.utils;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynaProxyUtils implements InvocationHandler {
private Object target;
/**
* 绑定委托对象并返回一个代理类
*
* @param target
* @return
*/
public Object createOject(Object target) {
this.target = target;
// 取得代理对象
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// 执行方法
Object result = method.invoke(target, args);
return result;
}
}