java Aop实现(JDKProxyFactory和CGLIBProxyFactory)

UserServiceBean.java  //interface

/**
 * 
 */
package cn.aop.service;

/**
 * @author 
 *
 */
public interface UserServiceBean {
	
	public void add();
	 
}

 UserSerivce.java //implement UserServiceBean

 

/**
 * 
 */
package cn.aop.service;

/**
 * @author 
 * 
 */
public class UserSerivce implements UserServiceBean {

	private String user;

	public UserSerivce() {

	}

	public UserSerivce(String user) {

		this.user = user;
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}

	/**
	 *
	 */
	@Override
	public void add() {
		System.out.println("add");

	}

}

 

 

JDKProxyFactory.java //jdk proxy

 

/**
 * 
 */
package cn.aop.proxy;

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

import cn.aop.service.UserSerivce;

/**
 * @author 
 *
 */
public class JDKProxyFactory implements InvocationHandler {
	
	private Object proxyObject;
	/**
	 * 拦截所有方法
	 * @param obj
	 * @return
	 */
	public Object createProxObject(Object obj){
		this.proxyObject=obj;
		return Proxy.newProxyInstance(proxyObject.getClass().getClassLoader(), proxyObject.getClass().getInterfaces(), this);
	}

	/**
	 *根据user为不为空,来invoke特定的方法
	 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		
		UserSerivce userSerivce=(UserSerivce)this.proxyObject;
		Object result=null;
		if(userSerivce.getUser()!=null){
			result=method.invoke(this.proxyObject,args);
			
		}
		return result;
	}
}
 

CGLIBProxyFactory.java //cglib proxy

 

/**
 * 
 */
package cn.cglib;

import java.lang.reflect.Method;

import cn.aop.service.UserSerivce;

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

/**
 * @author  
 * 
 */
public class CGLIBProxyFactory implements MethodInterceptor {

	private Object targerObject;
/**
	 * 拦截所有方法
	 * @param obj
	 * @return
	 */
	public Object createProxObject(Object targerObject) {
		this.targerObject = targerObject;
		Enhancer enhancer=new Enhancer();
		enhancer.setSuperclass(this.targerObject.getClass());
		enhancer.setCallback(this);
		return enhancer.create();
	}

	/**
	 *根据user为不为空,来invoke特定的方法
	 */
	@Override
	public Object intercept(Object targerObject, Method method, Object[] args,
			MethodProxy arg3) throws Throwable {
		UserSerivce userSerivce=(UserSerivce)this.targerObject;
		Object result=null;
		if(userSerivce.getUser()!=null){
			result=method.invoke(this.targerObject,args);
			
		}
		return result;
	}
}
 

ProxyTest.java   //junit test

package junit.test;


import org.junit.BeforeClass;
import org.junit.Test;

import cn.aop.proxy.JDKProxyFactory;
import cn.aop.service.UserSerivce;
import cn.aop.service.UserServiceBean;
import cn.cglib.CGLIBProxyFactory;

public class ProxyTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}
	@Test public void JDKProxyFactoryTest(){
		
		JDKProxyFactory proxy=new JDKProxyFactory();
		 
		UserServiceBean userBean=(UserServiceBean)proxy.createProxObject(new UserSerivce("xxx"));
		userBean.add();
	}
	@Test public void  CGLIBProxyFactoryTest(){
		CGLIBProxyFactory  proxy=new CGLIBProxyFactory();
		UserServiceBean userBean=(UserServiceBean)proxy.createProxObject(new UserSerivce(null));
		userBean.add();
		
	}

}
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值