静态代理模式示例
来源:互联网 发布:国泰安数据服务中心 编辑:程序博客网 时间:2024/05/29 11:29
代理模式的英文叫做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 {@Overridepublic void doCreate(User user) {System.out.println("创建一个用户:doCreate");}@Overridepublic void doUpdate(User user) {System.out.println("修改一个用户:doUpdate");}@Overridepublic void doRemove(User user) {System.out.println("删除一个用户:doRemove");}@Overridepublic User findById(Integer id) {System.out.println("查询一个用户:findById");return null;}@Overridepublic 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事务提交");}@Overridepublic void doCreate(User user) {log("doCreate");this.iUserDAO.doCreate(user);commit();}@Overridepublic void doUpdate(User user) {log("doUpdate");this.iUserDAO.doUpdate(user);commit();}@Overridepublic void doRemove(User user) {log("doRemove");this.iUserDAO.doRemove(user);commit();}@Overridepublic User findById(Integer id) {log("doRemove");this.iUserDAO.findById(id);commit();return null;}@Overridepublic 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日志,后面提交了事务
0 0
- 静态代理模式示例
- 代理模式-静态代理
- 代理模式-静态代理
- 代理模式--静态代理
- 代理模式-静态代理
- 代理模式--静态代理
- 静态代理示例
- java代理模式---静态代理
- 代理模式之静态代理
- 代理模式之静态代理
- 代理模式之静态代理
- 代理模式之静态代理
- JAVA代理模式--静态代理
- 代理模式之静态代理
- 代理模式之静态代理
- Java代理模式-静态代理
- 代理模式之静态代理
- 代理模式之静态代理
- egret项目里的文件夹的用途(完善中)
- Java 随机生成字符串
- 二叉树的镜像||顺时针打印矩阵
- linux scandir 的使用
- springmvc拦截器HandlerInterceptorAdapter预处理
- 静态代理模式示例
- Android对物理键的监听,连续点击两次且间隔不超过两秒退出应用
- 1.Draftjs 学习笔记
- MySQL的binlog日志
- HTTPS 和 HTTP 的区别
- 树莓派(Raspberry Pi 3) - Raspbian中文输入法安装及中文环境配置
- 如何上传自己的项目到github呢?
- Python GUI --- PyQt
- Sqoop环境搭建