随笔-16  评论-54  文章-0  trackbacks-0

       说真的,对于spring提供AOP的功能,个人实在不敢太过于恭维。主要是Spring的AOP功能没那么强大,而且必须是对于spring容器管理的bean才能实施AOP功能,对于容器外的bean就无能为力了。而且spring没有提供属性的AOP功能。在这些方面,spring AOP真的不能和Aspectj相比。Aspectj的AOP功能才真的是真正意义的AOP框架,提供的功能非常强大,几乎可以实现任何类型的AOP。不过Aspectj的学习曲线相对要比spring AOP稍微陡峭一点,主要是spring AOP可以当成普通javabean来处理,而Aspectj还要另外做编译器,比较麻烦。不过,庆幸的是,eclipse下面有Aspectj插件,开发起来也是很方便。所以一般,复杂的AOP功能,还是推荐用Aspectj

     对于一般的J2EE开发来说,要实现一些比较常用的AOP,Spring 还是能满足的。比如事务、异常、日志、权限等等,在这些方面,spring AOP还是比较方便的,特别是事务处理,spring提供了相当好的集成。如果事务处理用Aspectj来实现,不见得好多少。

    一直以来,觉得spring AOP最好用的一个地方就是提供了BeanNameAutoProxyCreator,这个类真的非常方便,以至于个人一旦遇到要实现AOP,首先就是求组于BeanNameAutoProxyCreator,如果BeanNameAutoProxyCreator实现不了,再考虑别的。不过,一般情况来说,BeanNameAutoProxyCreator的确能满足需要了,除非你的需求真的千奇百怪。

   在应用spring AOP功能时,优先考虑用接口。因为如果用接口的话,那么spring会创建一个代理,并在代理里面实现AOP增强代码,并调用真正的实例对象。不过,spring AOP功能不一定非要用接口,一些普通类也是可以的。对于普通类,spring会用CGLIB来动态生成一个新类。并且CGLIB会保持一个生成类的cache,因此它不会一直生成新类。spring使用ProxyCallbackFilter对象把其它对象放进map进行管理。如果没有管理好cache,将会产生大量的java对象,直至出现OutOfMemoryErrors。因此使用springaop时,一定要正确实现equals and hashCode。

   
不过,不管怎么样,在应用spring AOP时,还是优先考虑接口方式,毕竟面向接口方式还是值得推荐的一个编程思想。

posted on 2006-07-31 19:37 jspark 阅读(4098) 评论(11)  编辑  收藏

评论:
# re: 关于Spring AOP和BeanNameAutoProxyCreator 2007-08-07 12:35 |
好烂啊  回复  更多评论
  
# re: 关于Spring AOP和BeanNameAutoProxyCreator 2008-10-17 09:25 | magic
如果没有管理好cache,将会产生大量的java对象,直至出现OutOfMemoryErrors。因此使用spring的aop时,一定要正确实现equals and hashCode。

这两句话怎么理解啊?  回复  更多评论
  
# re: 关于Spring AOP和BeanNameAutoProxyCreator[未登录] 2008-10-22 12:45 | a
空谈,装大师  回复  更多评论
  
# re: 关于Spring AOP和BeanNameAutoProxyCreator[未登录] 2008-12-01 21:54 | me
烂  回复  更多评论
  
# re: 关于Spring AOP和BeanNameAutoProxyCreator 2009-07-29 17:35 | tonywangzhao
只有文字 没有一点的说服性 貌似说的很有利 但是需要代码的验证 鉴定完毕 谢谢  回复  更多评论
  
# re: 关于Spring AOP和BeanNameAutoProxyCreator[未登录] 2009-10-14 13:27 | 123
能不能举例说明一下啊  回复  更多评论
  
# re: 关于Spring AOP和BeanNameAutoProxyCreator[未登录] 2009-10-14 13:27 | 123
能不能举例说明一下  回复  更多评论
  
# re: 关于Spring AOP和BeanNameAutoProxyCreator 2009-10-14 15:46 | none
spring 的 map 是不是 weak的?
aop难道不能singleton?
aop一定要用在bean上?为什么不用再bean上?

几年过去了,楼主你睡醒了没?  回复  更多评论
  
# re: 关于Spring AOP和BeanNameAutoProxyCreator 2010-06-15 17:02 | mopishv0
AspectJ是在编译期或者后编译期完成织入切面的
当然强大了……
Spring只是在运行期实现动态代理罢了
据说他是用IoC实现的AOP
不过这个帖子已经过了很久了
LZ找没找到SPRING AOP的具体实现原理呢?
知道的话请把原理告诉我吧
mopishv0@163.com  回复  更多评论
  
# re: 关于Spring AOP和BeanNameAutoProxyCreator 2011-10-27 10:09 | zhengb
确实比较不知所云@我
  回复  更多评论
  
# re: 关于Spring AOP和BeanNameAutoProxyCreator[未登录] 2012-04-13 16:09 | 111111
啥JB玩意儿!!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: