栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

要求:使用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、运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684967.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号