论坛首页 Java企业应用论坛

Java AOP学习

浏览 13413 次
锁定老帖子 主题:Java AOP学习
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-18  
先说说我对几个概念的理解

通知(Advice):横切操作时具体的操作。
切入点(Pointcut):描述什么时候需要进行横切操作,即在哪些地方需要加入通知,但是切入点不关心具体的通知是什么。
通知者(Advisor):由于通知者是通过切入点来创建的(切入点作为创建一个通知者实例时的参数),切入点可以对目标类和目标方法进行详细的描述,所以通知者告诉代理哪些类的哪些方法需要进行横切操作,从而对需要实现横切的方法进行灵活的定制。我把通知者理解为切入点和通知的绑定(通知作为创建通知者实例时的另一个参数),它描述了哪些类的哪些方法需要进行哪些横切操作(即哪个通知)。

再说说代理,代理的作用就是透明的为我们提供获得了通知的目标类(具体的使用方法看一下例子就明白了,非常简单)。这个目标类可以是我们自己写的任何类或者其他第三方类。我们在调用通过代理得到的目标类中的方法时就会触发某个通知,从而完成横切操作。

最后是我总结的实现横切的一般步骤
简单的切入:
1,创建某个通知的实例(spring提供五种通知)
2,创建代理的的实例
3,将通知加入代理
4,通过代理获取目标类实例
5,调用目标类的方法。


可对需要横切的方法进行具体定制的切入:
1,创建切入点实例(Spring提供了七种可对目标类和目标方法进行定制的切入点实现)
2,通过切入点和通知创建通知者实例
3,将通知者加入代理
4,通过代理获取目标类实例
5,调用目标类的方法。

实现Spring IoC容器的访问,可以通过如下两个接口完成
1.BeanFactory:开发者借助于配置文件实现对JavaBean的配置和管理.
2.ApplicationContext:构建在BeanFactory基础上,既继承于它,除了具有BeanFactory的功能外,还添加其他的功能
.3区别:BeanFactory 延迟载入所有的Bean,至到getBean()被调用时才被创建。
ApplicationContext 在上下文启动后预载入所有的单实例Bean

   发表时间:2007-01-19  
我还是不怎么明白原理。
用Spring也有一段时间了。
对AOP的理解太少。
0 请登录后投票
   发表时间:2007-01-19  
ffgames 写道
我还是不怎么明白原理。
用Spring也有一段时间了。
对AOP的理解太少。


可以从看spring的事务处理代码入手。
可以先看下面的2个类:

TransactionProxyFactoryBean:
在spring配置文件中需要指定负责处理事务的类。
这个类的getObject方法,可以返回需要事务功能的类的aop代理类.
该代理类会执行配置的拦截器的相关方法。

TransactionInterceptor:
这个就是用来具体处理事务的拦截器了。
0 请登录后投票
   发表时间:2007-01-19  
什么通知、切入点那几个概念我总不愿意记。关于原理,前几天看书里说:做需求分析时用到的用例是功能性的,用例之间的关系是横向的;而用例在编码实现时会用到不同层次的组件,比如表现层组件、数据层组件,这些组件间关系是纵向的。用例和用例间,组件和组件间,耦合性不大。
但是一个用例会由不同层次上的多个组件实现,一个组件会用来实现多个用例。这种交叉如果不能得到有效控制,代码的耦合性就高了。面向方面可以解决这个问题,“方面”是具有一定功能的,有用例的特性;同时它又有组件的特性。事务,日志就是这样,不但有一定的功能,而且如果在某一层次上把它看做组件,重用性非常高。我就是这样理解“方面”:把功能做成组件。
0 请登录后投票
   发表时间:2007-01-19  
个人觉得先熟悉dynamicProxy(不妨可以写个列子跑跑),对于AOP的理解会有帮助.
0 请登录后投票
   发表时间:2007-01-19  
ppeter 写道
个人觉得先熟悉dynamicProxy(不妨可以写个列子跑跑),对于AOP的理解会有帮助.


spring中有2种aop代理类实现,一种是jdk的动态代理,另外一种是CGLib实现的代理类。ppeter说的很有道理,看看动态代理,对理解aop非常有好处的。
0 请登录后投票
   发表时间:2007-01-24  
我的理解Advisor是Spring用来把Advice和PointCut联系在一起的东西,让spring知道哪些对象,哪些地方该使用代理,使用什么代理
0 请登录后投票
   发表时间:2007-01-24  
我觉得真想正确理解和使用aop,必须要真正明白oop以后,否则aop的使用上必定会有麻烦
0 请登录后投票
   发表时间:2007-05-26  
做项目的时候,不要忘记多看看spring文档,这样对真真理解AOP会有很大的帮助
0 请登录后投票
   发表时间:2007-05-27  
想要真正实现aop的所有功能,推荐看一下aspectJ。spring的aop还是有所限制。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics