现在的位置: 首页 > 综合 > 正文

Java中的代理

2019年03月08日 ⁄ 综合 ⁄ 共 1342字 ⁄ 字号 评论关闭

1.先创建以DAO层接口
package cn.ouyang.test.entity;
//DAO层接口
public interface Student {
 public void  deleteById(int
id);
 
 public void  selectById(int
id);
 
}

2.为之前接口写实现类
package cn.ouyang.test.entity;

public class StudentImpl implements
Student {

@Override
 public void deleteById(int id) {
  System.out.println("进行删除...");

 }

@Override
 public void selectById(int id) {
  System.out.println("进行查询...");

 }

}
3.写代理类:(动态代理):
package cn.ouyang.test.entity;

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

public class Inction implements
InvocationHandler {
 Object terget=null;
 public Inction(Object obj){
  this.terget=obj;
 }

@Override
 public Object invoke(Object proxy, Method method,
Object[] args)
   throws
Throwable {
  log();
  Object
result=method.invoke(terget, args);
  return result;
 }
 public void log(){
  System.out.println("正在记录日志!");

 }
 
 public Object getProxy(){
  return
Proxy.newProxyInstance(terget.getClass().getClassLoader(),
terget.getClass().getInterfaces(), this);
 }

}
4.写测试类:
package cn.ouyang.test.test;

import
cn.ouyang.test.entity.Inction;
import cn.ouyang.test.entity.Student;
import cn.ouyang.test.entity.StudentImpl;

public class Test {

 public static void main(String[] args) {
  //得到真实对象
  Student student=new
StudentImpl();
  //代理对象
  Inction inction=new
Inction(student);
  Student
student2=(Student)inction.getProxy();
  student2.selectById(2);
  student2.deleteById(2);
 }

}

 

抱歉!评论已关闭.