cglib实现AOP

本文通过实例介绍了如何使用CGLIB库实现面向切面编程(AOP),具体展示了如何为已有类添加前置通知,以及如何在类的方法执行前后进行拦截操作。通过提供PersonServiceImpl类的修改版本,演示了如何通过CGLIB代理来增强对象的功能,进而实现业务逻辑的解耦和模块化。

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

当要实现AOP的类没有接口是使用CGLIB实现AOP;如果要实现的AOP类有接口则使用JDK中的Proxy

CGLIG实现AOP举例

PersonServiceImpl.java

package com.aop.service.impl;


public class PersonServiceImpl{
	private String user = null;
	
	public PersonServiceImpl() {
	}
	
	public PersonServiceImpl(String user){
		this.user = user;
	}
	public String getUser() {
		return user;
	}
	
	public void save() {
		
		System.out.println("save()");
	}

	public void update() {
		System.out.println("update()");

	}
}

CGLibProxyFactory.java

package com.aop.factory;

import java.lang.reflect.Method;

import com.aop.service.impl.PersonServiceImpl;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;


public class CGLibProxyFactory implements MethodInterceptor{
	private Object targetObject;
	
	public Object createProxyInstance(Object targetObject){
		this.targetObject = targetObject;
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(this.targetObject.getClass());
		enhancer.setCallback(this);
		return enhancer.create();
	}

	@Override
	public Object intercept(Object proxy, Method method, Object[] args,
			MethodProxy methodProxy) throws Throwable {
		PersonServiceImpl service = (PersonServiceImpl) this.targetObject;
		Object result = null;
		if(service.getUser() != null){
			result = method.invoke(targetObject, args);
		}
		return result;
	}
}
测试类:AOPTest.java

package com.aop.junit;

import com.aop.factory.CGLibProxyFactory;

import com.aop.service.impl.PersonServiceImpl;

public class AOPTest {

	public static void main(String[] args) {
	
		CGLibProxyFactory cgFactory = new CGLibProxyFactory();
		PersonServiceImpl serviceImpl = (PersonServiceImpl) cgFactory.createProxyInstance(new PersonServiceImpl("aaaa"));
		serviceImpl.update();
	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值