静态代理模式示例

本文介绍了代理模式的概念,并通过一个Java静态代理的实例展示了如何在DAO操作中添加日志记录和事务处理。具体步骤包括创建User用户、定义DAO接口、实现接口的DAO类、创建静态代理类StaticProxy以及进行方法测试,测试中展示了在调用findAll()方法时,代理类先记录日志再提交事务的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代理模式的英文叫做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日志,后面提交了事务



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值