现在的位置: 首页 > 综合 > 正文

使用CGLIB实现AOP功能

2018年02月13日 ⁄ 综合 ⁄ 共 1500字 ⁄ 字号 评论关闭

@Test
	public void proxyTest2()
	{
		CGlibProxyFactory factory = new CGlibProxyFactory();
		PeopleServiceBean peopleServiceBean = (PeopleServiceBean) factory.createProxyInstance(new PeopleServiceBean("张三"));
		peopleServiceBean.save("hello");
	}

package com.tiger.aop;

import java.lang.reflect.Method;

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

import com.tiger.service.impl.PeopleServiceBean;

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());//非final
		enhancer.setCallback(this);
		return enhancer.create();
	}
	
	public Object intercept(Object proxy, Method method, Object[] args,MethodProxy methodProxy)
			throws Throwable
	{
		PeopleServiceBean bean = (PeopleServiceBean) this.targetObject;
		Object result = null;
		
		if(bean.getUser() != null)
		{
			result = methodProxy.invoke(targetObject, args);
		}
		
		return result;
	}
}

package com.tiger.service.impl;

import com.tiger.service.PeopleService;

public class PeopleServiceBean implements PeopleService
{
	private String user = null;
	
	public PeopleServiceBean(){}
	
	public PeopleServiceBean(String user)
	{
		this.user = user;
	}
	
	public void save(String name)
	{
		System.out.println("我是save()方法");
	}

	public void update(String name, Integer peopleid)
	{
		System.out.println("我是update()方法");
	}

	public String getPeopleName(Integer peopleid)
	{
		System.out.println("我是getPeopleName()方法");
		return "xxx";
	}

	public String getUser()
	{
		return user;
	}
}

抱歉!评论已关闭.