静态代理、动态代理、spring动态代理(Spring AOP面向切面编程)、spring动态代理注解版

本文详细介绍了Java中的静态代理和动态代理,包括代理接口、目标对象、代理类的实现以及测试。接着深入探讨了Spring AOP的面向切面编程,通过XML配置和注解方式实现动态代理,讲解了AOP的核心概念如连接点、切入点、通知等,并给出了完整的代码示例。
摘要由CSDN通过智能技术生成

目录

静态代理

列:实现静态代理

代理接口User.java

目标对象 实际业务逻辑实现方法UserImpl.java

代理类UserProxy.java

测试

动态代理

列: 实现动态代理

创建po对象

 创建dao

创建代理类 MyProxy.java

测试

Spring Aop 面向切面编程(spring动态代理)

列:aop练习

导包

User.java

UserDao.java

MyAspect.java切面

bean.xml实现

Spring AOP面向切面编程(spring动态代理注解版)

列:spring动态代理注解版

导包

User.java

UserDao.java

UserDaoImpl.java

beans.xml

MyAspect.java

Test.java


静态代理

列:实现静态代理

代理接口User.java

public interface User {
      /*
       * 业务接口
       * */
	public void work(String workName);
	public void doing();  //增加接口
}

目标对象 实际业务逻辑实现方法UserImpl.java

public class UserImpl implements User{

	@Override
	public void work(String workName) {
		// TODO Auto-generated method stub
		 System.out.println("老王 "+ ".");
	}

	@Override
	public void doing() {
		// TODO Auto-generated method stub
		
	}
}

代理类UserProxy.java

实现业务逻辑接口,接收一个实际业务处理对象

public class UserProxy implements User{
    private User user;
	public UserProxy(User user) {
		super();
		this.user = user;
	}

	@Override
	public void work(String workName) {
		// TODO Auto-generated method stub
		check();
		user.work(workName);
		printLog();
	}
	@Override
	public void doing() {
	}
	private void printLog() {
		// TODO Auto-generated method stub
		System.out.println("权限验证");
		
	}

	private void check() {
		// TODO Auto-generated method stub
		System.out.println("打印日志");
	}
}

测试

	@org.junit.Test
	public void test1() {
		User userProxy = new UserProxy(new UserImpl());
		userProxy.work("在吃饭");
	}

动态代理

列: 实现动态代理

创建po对象

 创建dao

创建user接口与 接口实现类

 

创建角色接口与 接口实现类

创建代理类 MyProxy.java

//3创建代理对象
public class MyProxy implements InvocationHandler{
   private Object object;//3.1生命委托对象
   //3.2 有参数的构造方法 
   public MyProxy(Object object) {
		super();
		this.object = object;
	}
   //3.3得到代理对象
   public  Object getProxyObjectInstance() {
	   //Proxy.newProxyInstance(类加载器,接口,代理对象的实例)
	return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
	   
   }
   //3.4生成代理对象
   /**
	 * 在代理实例上处理方法调用并返回结果
	 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		// TODO Auto-generated method stub
		check();
		Object retObject=method.invoke(object, args);
		printLog();
		return retObject;
	}
    public void check(){
    	System.out.println("用户权限验证");
    }
    public void printLog(){
    	System.out.println("打印日志");
    }

}

测试

	/**
	 * 测试user代理对象
	 */
	@org.junit.Test
	public void testUserProxyObject() {
    MyProxy myProxy=new MyProxy(new UserDaoImpl());//委托
    UserDao userDao=(UserDao)myProxy.getProxyObjectInstance();//获取代理对象
    userDao.addUser(new User());
    System.out.println();
    String id=userDao.getId();
    System.ou
  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值