代理设计模式

代理模式是Java常见的设计模式之一。所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。
代理模式就算在不修改目标类源代码的情况下,对其进行功能的增强。
代理模式可以有两种实现的方式,一种是静态代理类,另一种是各大框架都喜欢的动态代理。
静态代理:代理对象是由程序猿创建的,而且一个Proxy一般就只能代理一类目标对象(实现共同Subject接口),相当于代理类和被代理类关系提前要确定。
动态代理:可以通过jdk和cglib两种方式实现
jdk动态代理是SUN公司提供的,是官方提供的代理方式。
cglib是第三方提供的代理方式。
jdk动态代理目标类必须实现接口
接口类

public interface IUserService {
	void save(Object obj);
	void update(Object obj);
	void delete(int id);
	List findAll();
	Object findById(int id);
}

实现类

public class UserServiceImpl implements IUserService {

	@Override
	public void save(Object obj) {
		System.out.println("保存用户");
	}

	@Override
	public void update(Object obj) {
		System.out.println("修改用户");
	}

	@Override
	public void delete(int id) {
		System.out.println("删除用户");
	}

	@Override
	public List findAll() {
		System.out.println("查询列表");
		return null;
	}

	@Override
	public Object findById(int id) {
		System.out.println("根据id查找");
		return null;
	}

}

切面类

public class TxAspect {

	public void beginTransaction(){
		System.out.println("开启事务");
	}
	
	public void afterAdvice(){
		System.out.println("提交事务");
	}
}

测试类


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ljp.service.IUserService;

public class Test {
	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
		IUserService bean = (IUserService) ac.getBean("target");
		bean.delete(1);
		System.out.println(bean.getClass());
	}
}

测试结果
在这里插入图片描述用了动态代理,就可以在原来代码的基础上做操作,这就是AOP即面向切面编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值