struts2权威指南 aop实现原理 笔误代码

关键字:struts2 ,aop实现原理

最近在学习李刚老师的struts2权威指南 ,从书的内容上看感觉李刚老师有丰富的开发经验。

不过在学习到213页关于aop拦截器的实现原理代码中,感觉有个笔误的地方!

   拦截器的实现原理JDK的动态代理

/**
 * 因为Dog 动态代理只能对实现了接口的实例来生成代理
 * @author Administrator
 *
 */
public interface Dog {
	
	public void info();
	public void run();

}

 

 

public class DogImpl implements Dog {
	public void info()
	{
		System.out.println("我是一个猎狗");
	}

	
	public void run()
	{
		System.out.println("我奔跑速度");
	}
	
}

 

/**
 * 拦截器类
 * @author Administrator
 *
 */
public class DogIntercepter {

	
	
	public void method1()
	{
		System.out.println("===模拟通用方法一");
	}
	
	public void method2()
	{
		System.out.println("===模拟通用方法二=======");
	}
}

 

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

public class ProxyHandler implements InvocationHandler{

	private Object target;//被加入切面的对象
	DogIntercepter di=new DogIntercepter();
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		// TODO 自动生成方法存根
	
		Object result=null;
		if(method.getName().equals("info"))
		{
			di.method1();//切面
			result=method.invoke(target, args);
			//可以动态的调用目标对象的方法
			di.method2();
		}
		else
		{
			result=method.invoke(target, args);
		}
			
		return result;
	}
	

	public void setTarget(Object o)
	{
		this.target=o;
	}
	
	
}

 在下面的代理工厂中有点感觉不是很理想应该是笔误了

 

import java.lang.reflect.Proxy;
/**
 * 该代理工厂的主要作用是根据目标对象生成一个代理的对象
 * @author Administrator
 *
 */
public class MyProxyFactory {

 public static Object getProxy(Object object)
 {
  
  Class cls=object.getClass();
  ProxyHandler handler=new ProxyHandler();
  handler.setTarget(object);//
  return Proxy.newProxyInstance(DogImpl.getClassLoader(), object.getClass().getInterfaces(), handler);//handler
  //代理工厂负责根据目标对象和对应的拦截器生成新的代理对象
  //代理对象中的方法是目标方法和拦截器方法的组合
 }
 

特更改为

import java.lang.reflect.Proxy;
/**
 * 该代理工厂的主要作用是根据目标对象生成一个代理的对象
 * @author Administrator
 *
 */
public class MyProxyFactory {

	public static Object getProxy(Object object)
	{
		
		Class cls=object.getClass();
		ProxyHandler handler=new ProxyHandler();
		handler.setTarget(object);//
		return Proxy.newProxyInstance(cls.getClassLoader(), object.getClass().getInterfaces(), handler);//handler
		//代理工厂负责根据目标对象和对应的拦截器生成新的代理对象
		//代理对象中的方法是目标方法和拦截器方法的组合
	}
	
}

 

public class TestDog {

	public static void main(String args[])
	{
		Dog targetObject=new DogImpl();
		Dog dog=null;
		Object proxy=MyProxyFactory.getProxy(targetObject);
		if(proxy instanceof Dog)
		{
			dog=(Dog)proxy;
		}
		dog.info();
		dog.run();
	}
}

 

 

 

欢迎大家积极对struts2拦截器原理以及jdk动态代理发表意见谢谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值