关键字: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动态代理发表意见谢谢
分享到:
相关推荐
本《Struts2权威指南》结合了源码分析,旨在帮助读者深入理解Struts2的工作原理以及如何在实际项目中有效利用它。 首先,Struts2的核心功能包括动作映射、结果类型、拦截器等。动作映射允许开发者将URL请求与特定的...
在Spring框架中,AOP通过切面(Aspect)和通知(Advice)来实现,切面定义了关注点的结构,而通知则是实际执行的代码。 在这个示例中,我们可能会创建一个切面类,用于处理日志记录。切面类会包含一个或多个通知...
NULL 博文链接:https://zhang-yingjie-qq-com.iteye.com/blog/319927
在这个"spring和struts的整合-aop的使用"主题中,我们将深入探讨如何将Spring与Struts2集成,并利用Spring的AOP实现日志记录。 首先,整合Spring和Struts2的关键在于配置。通常,我们需要在Struts2的配置文件...
《Struts2权威指南》这本书深入浅出地讲解了Struts2框架的各个方面,帮助开发者掌握其核心概念和技术。 首先,Struts2的核心概念包括Action、Result、Interceptor(拦截器)等。Action是处理用户请求的核心组件,它...
本章节聚焦于《Struts2权威指南》第13章的代码实践部分,旨在深入理解和掌握Struts2的核心特性和实际应用。 在Struts2框架中,主要涉及以下几个关键知识点: 1. **Action类**:这是处理用户请求的核心组件,通常...
在Struts2中,拦截器就是实现AOP的一种方式。 **Struts2 拦截器**是在Action执行前后插入的代码片段,它们按照定义的顺序组成一个拦截器链。每个拦截器都有机会处理请求,决定是否允许Action执行,以及如何处理...
这本书《Struts2权威指南》是开发者学习和掌握Struts2框架的重要资源,它深入浅出地讲解了该框架的核心概念、设计模式以及实际应用。 Struts2框架基于Model-View-Controller(MVC)设计模式,它提供了全面的控制层...
这个压缩包包含的资源是Struts2学习的宝贵资料,包括API文档、深入讲解的书籍以及权威指南,旨在帮助初学者和有经验的开发者更好地理解和掌握Struts2的核心概念和技术。 1. **Struts2_API.chm**: 这是Struts2的...
1. **拦截器(Interceptors)**:Struts2的拦截器是基于AOP(面向切面编程)的概念,可以插入到请求处理流程中,实现如日志记录、事务管理、权限验证等功能,提高了代码的复用性和模块化。 2. **配置灵活性**:...
《Struts 2权威指南》这本书是深入学习该框架的重要参考资料,包含21个章节,全面覆盖了Struts 2的基础概念、核心组件、实战技巧以及最佳实践。 1. **Struts 2框架基础**:Struts 2是Apache软件基金会下的开源项目...
《Struts2权威指南》是李刚所著的一本详细解析Struts2框架的书籍,其完整版涵盖了Struts2的核心概念、配置、实践应用以及与其他流行技术如Spring、JSF、Hibernate的整合。 首先,让我们深入理解Struts2的基础知识。...
Struts 2 权威指南深入探讨了基于WebWork核心的MVC开发,该书旨在为读者提供关于Struts 2框架的全面理解和实践指导。Struts 2作为一款成熟的MVC框架,其发展历程和核心特性是理解其价值的关键。 在Web应用发展的...
本书《Struts 2权威指南》不仅涵盖了以上的基本概念,还会深入探讨Struts 2的高级特性,如拦截器的自定义、Action的分页、国际化、AOP(面向切面编程)的应用等。通过阅读本书,开发者将能够熟练运用Struts 2框架,...
这种通过代理模式实现的AOP方法,可以很好地将业务逻辑代码与额外的横切关注点分离,使得代码更加清晰,易于维护。如果将来需要去除日志记录功能,只需要替换掉代理类的实例,而不需要修改任何业务逻辑代码。此外,...
《Struts 2.1权威指南》作为一本全面介绍Struts 2框架的专业书籍,涵盖了从基本概念到高级技巧的全方位内容。对于希望深入了解并掌握Struts 2框架的开发者来说,这本书无疑是非常宝贵的资源。通过阅读本书,不仅可以...
这本书《Struts2技术内幕——深入解析Struts2架构设计与实现原理》深入探讨了Struts2的核心机制和设计理念,旨在帮助开发者更好地理解和运用这个框架。 首先,Struts2的出现是为了解决Struts1在MVC模式中的局限性,...
### Struts2技术内幕:深入解析Struts架构设计与实现原理 #### Struts2概述 Struts2是Apache Software Foundation支持的一个开源项目,它是Struts1的下一代版本,继承了Struits1的优点,并在此基础上进行了大量的...
2. **Interceptor(拦截器)**: Struts2的拦截器是实现AOP(面向切面编程)的关键,它们在Action调用前后执行,可以实现日志记录、权限检查、事务管理等多种功能。 3. **ValueStack与OGNL**: ValueStack是Struts2中...
综上所述,《PhotoShopCS2与Struts2权威指南》是一本综合性的技术图书,旨在帮助读者掌握图像设计与Web开发的关键技能,特别是如何在Java环境中利用Struts2框架构建高效的应用,并结合Spring和MyBatis实现数据库操作...