静态代理模式示例

    xiaoxiao2021-12-15  40

    代理模式的英文叫做Proxy,中文都可译为代理,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

    在Spring框架中,广泛存在基于代理模式的面向切面编程,用作LOG日志记录和事务提交。下面用一个仿javaee的程序简单实现静态代理。

    1.建立一个User用户

    package com.StaticProxy.user; public class User { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }

    2.建立一个DAO的Interface接口类,定义基本的CRUD操作

    package com.StaticProxy.DAO; import java.util.List; import com.StaticProxy.user.User; public interface IUserDAO { public void doCreate(User user); public void doUpdate(User user); public void doRemove(User user); public User findById(Integer id); public List<User> findAll(); }

    3.DAO类实现接口

    package com.StaticProxy.DAO; import java.util.List; import com.StaticProxy.user.User; public class UserDAO implements IUserDAO { @Override public void doCreate(User user) { System.out.println("创建一个用户:doCreate"); } @Override public void doUpdate(User user) { System.out.println("修改一个用户:doUpdate"); } @Override public void doRemove(User user) { System.out.println("删除一个用户:doRemove"); } @Override public User findById(Integer id) { System.out.println("查询一个用户:findById"); return null; } @Override public List<User> findAll() { System.out.println("查询所有用户:findAll"); return null; } }

    4.静态代理类StaticProxy,同时简单写一个main函数进行测试

    package com.StaticProxy.proxy; import java.util.List; import com.StaticProxy.DAO.IUserDAO; import com.StaticProxy.DAO.UserDAO; import com.StaticProxy.user.User; public class StaticProxy implements IUserDAO{ private IUserDAO iUserDAO; public IUserDAO bind(IUserDAO userDao) { this.iUserDAO = userDao; return this; } //增加log记录 private void log(String name) { System.out.println("操作:" + name + " 日志记录"); } //commit事务处理 private void commit() { System.out.println("commit事务提交"); } @Override public void doCreate(User user) { log("doCreate"); this.iUserDAO.doCreate(user); commit(); } @Override public void doUpdate(User user) { log("doUpdate"); this.iUserDAO.doUpdate(user); commit(); } @Override public void doRemove(User user) { log("doRemove"); this.iUserDAO.doRemove(user); commit(); } @Override public User findById(Integer id) { log("doRemove"); this.iUserDAO.findById(id); commit(); return null; } @Override public List<User> findAll() { log("doRemove"); this.iUserDAO.findAll(); commit(); return null; } public static void main(String[] args) { IUserDAO userDao = new UserDAO(); IUserDAO StaticProxy = new StaticProxy().bind(userDao); User user = new User(); StaticProxy.findAll(); } }

    5.简单测试一个方法findAll(),可以看到执行结果中前面记录了log日志,后面提交了事务

    转载请注明原文地址: https://ju.6miu.com/read-1000066.html

    最新回复(0)