`

struts,spring在面向切口上的体现

 
阅读更多

       最近看了一些mybatis的知识,有多了解了一下映射的概念,特别是javabean的广泛使用,感觉这是设计方面比较优秀,联想到struts2,spring中的一些共同机制,就对几点归纳和记录。

       

      主要说明的就是类似于AOP的设计理念,在struts中action提交之前可以被拦截器(interceptor,methodfilterinterceptor)拦截,取得ACTIONINVOCATION,相当于取得容器管理权,可对搜索action进行动态增强处理,而且又可通过监听器(preresultlistener)在跳转逻辑视图时更改result,这就相当于AOP中before操作嘛,同样的spring中各种bean(component,service,controller,repository功能区分)在执行之前,可以通过bean后处理器(beanpostprocessor)或者容器后处理器(beanfactorypostprocessor)(其实bean后处理器),不限定id,即手动注册,一样的效果,至少执行层面)。至于Aspectj与spring的AOP,功能很是强大,因为对于spring而言,一切class均可视作bean,所以相互之间增强,就完全是合理的,而且不断依赖性注入,聚合之后的bean,虽说会冗余,但是却是非常不错。aop几项操作,Before,AfterThrowing,AfterReturing,After,Around(这个功能最为强大,可以视为Before,After的合集),这些操作相当于动态代理(增强处理,耦合度底),非常灵活,例如Around,可以获取代理的方法的返回值,植入参数,因为貌似之前的struts的拦截器,spring bean后处理器不能够对被代理类内部进行直接干扰

,而且操作简单(比起filterinterceptor)。个人认为AOP这种设计理念就是由java反射机制衍生而来的,打个比方,java反射是可以对对象方法的参数和返回值进行植入和返回使用,但是不能够对其内部方法进行改造的,那么你看AOP同样如此,也是不能对方法内部进行改造的。另外对于java动态代理的话,是对本身class的一个对象建立或者自定义构造的意思,以上我说的动态代理只是觉得这个名字不错,只是引用,不要混淆。

    因水平,组织能力有限,再加上主要是记录我个人的学习总结,所以有些东西非常简单,甚至含糊,讲不清楚,欢迎指出并说明。大笑

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics