使用Spring框架技术的面向切面编程方法,实现对目标方法的环绕通知。

本文通过Spring框架的AOP实现,展示了如何在用户添加和删除操作前后添加环绕通知,包括权限校验和日志记录。实例化了UserDao接口和实现类,创建MyAspect切面类,并利用JdkProxy创建代理以应用切面。测试代码展示了整个过程的运行效果。
摘要由CSDN通过智能技术生成

要求:使用Spring框架技术的面向切面编程方法,实现对目标方法的环绕通知。请以用户管理为例(简单模拟即可),实现对用户添加和用户删除方法的环绕通知,模拟在这些方法前进行校验操作,在这些方法之后进行日志处理操作。要求编写目标类、切面类和代理工厂等组件的实现代码和配置文件,编写测试程序,运行并查看结果。

需要建两个包,一个jdk包,一个aspect包

1、目标类接口UserDao

package com.tyut.jdk;

public interface UserDao {
	public void addUser();
	public void deleteUser();
}

2、UserDao的实现类

package com.tyut.jdk;

public class UserDaoImpl implements UserDao {

	@Override
	public void addUser() {
		System.out.println("添加用户");

	}

	@Override
	public void deleteUser() {
		System.out.println("删除用户");

	}

}

3、MyAspect切片类

package com.tyut.aspect;

public class MyAspect {//切面类
	public void check_Permissions(){
		System.out.println("模拟检查权限..");
	}
	public void log(){
		System.out.println("模拟记录日志..");
	}
}

4.Jdk代理工厂类JdkProxy

package com.tyut.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import com.tyut.aspect.MyAspect;

public class JdkProxy implements InvocationHandler{//代理工厂类
	private UserDao userDao;
	
	public Object createProxy(UserDao userDao){		
		this.userDao=userDao;
		ClassLoader classLoader=JdkProxy.class.getClassLoader();
		Class[] clazz=userDao.getClass().getInterfaces();
		
		return Proxy.newProxyInstance(classLoader,clazz,this);
	}
	
	//实现了InvocationHandler中的invoke方法;
	public Object invoke(Object proxy,Method method,Object[] args) 
			throws IllegalAccessException, IllegalArgumentException, InvocationTargetException{
		MyAspect myAspect=new MyAspect();
		myAspect.check_Permissions();
		Object obj=method.invoke(userDao, args);
		myAspect.log();
		return obj;
	}
}

5、测试类

package com.tyut.jdk;

public class JdkTest {
	public static void main(String[] args){
		JdkProxy jdkProxy=new JdkProxy();
		
		UserDao userDao=new UserDaoImpl();
		
		UserDao userDao1=(UserDao)jdkProxy.createProxy(userDao);
		userDao1.addUser();
		userDao1.deleteUser();
	}
}

6、运行结果:
在这里插入图片描述

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值