1、静态代理

接口类AdminService.java接口

public interface AdminService {
void update();
Object find();
}

实现类AdminServiceImpl.java

public class AdminServiceImpl implements AdminService{
public void update() {
System.out.println("修改管理系统数据");
} public Object find() {
System.out.println("查看管理系统数据");
return new Object();
}
}

代理类AdminServiceProxy.java

public class AdminServiceProxy implements AdminService {

    private AdminService adminService;

    public AdminServiceProxy(AdminService adminService) {
this.adminService = adminService;
} public void update() {
System.out.println("判断用户是否有权限进行update操作");
adminService.update();
System.out.println("记录用户执行update操作的用户信息、更改内容和时间等");
} public Object find() {
System.out.println("判断用户是否有权限进行find操作");
System.out.println("记录用户执行find操作的用户信息、查看内容和时间等");
return adminService.find();
}
}

测试类Test.java

public class Test {
public static void main(String[] args) {
AdminService adminService = new AdminServiceImpl();
AdminServiceProxy proxy = new AdminServiceProxy(adminService);
proxy.update();
System.out.println("=============================");
proxy.find();
}
}

2、动态代理

接口类

public interface UserManager {
public int get();
}

实现类

public class UserManagerImpl implements UserManager{

    @Override
public int get() {
return 0;
}
}

代理类

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; public class LogHandler implements InvocationHandler {
private Object targetObject;
public Object newProxyInstance(Object targetObject){
this.targetObject=targetObject;
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(),this);
} @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object ret=null;
try{ /*原对象方法调用前处理日志信息*/
System.out.println("开始-->>");
ret=method.invoke(targetObject, args);
/*原对象方法调用后处理日志信息*/
System.out.println("完毕-->>");
}catch(Exception e){
throw e;
}
return ret;
}
}

测试

public class Test {
public static void main(String[] args) {
// System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");
LogHandler logHandler=new LogHandler(); UserManager userManager=(UserManager)logHandler.newProxyInstance(new UserManagerImpl()); System.out.println(userManager.get()); }
}

最新文章

  1. [原创]关于mybatis中一级缓存和二级缓存的简单介绍
  2. spring源码分析之cache注解
  3. jQuery-1.9.1源码分析系列(十) 事件系统——事件包装
  4. Innodb之表空间转移
  5. RabbitMQ、Memcache、Redis(队列、缓存)
  6. Mongodb操作总结
  7. 自定义控制器的View(loadView)及其注意点
  8. 黑马程序员_Java泛型
  9. 201521123051《Java程序设计》第十一周学习总结
  10. 关于非现场审计软件的一些介绍(ACL、IEDA、Teammate)
  11. [十四]JavaIO之PrintStream
  12. go标准库的学习-database/sql
  13. poj3696 欧拉函数引用
  14. JDBC封装
  15. jquery插件导出excel和pdf(解决中文乱码问题)
  16. 持续集成(1)gitlab的安装
  17. 查看项目中的laravel的版本
  18. bzoj 2038 A-小Z的袜子[hose] - 莫队算法
  19. Anaconda+django写出第一个web app(二)
  20. Gitlab installtation

热门文章

  1. 3.4 Common Principles 通用原则
  2. JDBC:(java database Connection) java数据库连接。
  3. 手把手教你学Dapr - 1. .Net开发者的大时代
  4. pagelayout在py中的引用不支持size_hint和pos_hint
  5. 2019OO第四单元作业总结&OO课程整体总结
  6. STM32中按键中断分析
  7. 【做题记录】[NOIP2011 提高组] 观光公交
  8. AXI总线简介、ID分析、DMA、Vivado烧录、系统集成
  9. 求1+2+3...+n 牛客网 剑指Offer
  10. poj 3041 Asteroids(最小点覆盖)