Spring之AOP:我行之我见

本文详细介绍了面向切面编程(AOP)的概念及其在软件开发中的应用价值,通过实例展示了如何使用AOP技术在Java程序中实现不修改源代码情况下添加功能,如日志记录、权限验证等。

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

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。也叫面向方面:Aspect Oriented Programming(AOP),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。为啥吗要用AOP通俗的解释就是:好比高速公路的收费站,我相信不会有傻逼的人为每个车都建个收费站,一个收费站就够了,别管你是神马车,没有牌照统统滚蛋。这就是AOP的功能。他不属是与这个公路本身的一部分,而是我加上的,专门对于那些无照驾驶的。

下面我们来看看AOP在普通Java程序的实现:

public class UserDaoImp implements UserDao {

	private User user;
	public UserDaoImp(){}
	public UserDaoImp(User user)
	{
		this.user=user;
	}
	public User getUser() {
		return user;
	}
	
	public void delete(User user) {
		System.out.println("delete....");

	}

	public void select(User user) {
		// TODO Auto-generated method stub
		System.out.println("select....");

	}

	public void update(User user) {
		// TODO Auto-generated method stub
		System.out.println("update....");

	}

}


public class AopInterceptor implements InvocationHandler{

	private Object targetObject;//目标对象
	public Object createObjectProxy(Object targetObject)//创建代理对象
	{
		this.targetObject=targetObject;
		//加载目标类,目标类实现的接口,切面类
		return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), this.targetObject.getClass().getInterfaces(), this);
	}
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		// 环绕advice
		System.out.println("环绕advice.....");
		UserDaoImp userDaoImp=(UserDaoImp)this.targetObject;
		if(userDaoImp.getUser()!=null)
		{
			
			//返回目标类方法
			try
			{
				//前置advice
				System.out.println("前置advice.....");
				return method.invoke(targetObject, args);
				//后置advice
				
			}
			
			catch(Exception e)
			{
				//异常advice
				System.out.println("异常advice.....");
			}
			finally
			{
				//最终advice
				System.out.println("最终advice.....");
			}
			
		}
		return null;
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值