初试Spring AOP

gigix 说,j2ee的世界象一座魔法森林,数不清的新概念和open source framework,让新进来的同学非常眼晕。gigix还说,AOP正在成为软件开发的下一个圣杯,呵呵,我想起帝国时代中的圣杯了,僧侣们梦想收集到的法器,可以提升精神力量......

在上回学习iBatis的Dao框架时,提到动态代理,恰好Spring framework中也支持AOP,同样是采用jdk1.3的动态代理方式的。不过基于配置的方案更优雅一些。

我走了一遍那个简单的例子,就是基于org.springframework.aop.MethodBeforeAdvice接口来实现拦截器的。现在网上一说AOP,举的例子总是LOG的,晕死。iBatis中的事务包裹也可以算一个典型的用法。

在使用spring的aop时,除了spring.jar外,切记要引入以下几个包:

1.  aopalliance.jar
2.  commons-logging.jar

3.jakarta-oro-2.0.8.jar 这个比较隐蔽,因为不引这个编译期不报错。  

然后要理解三个概念,就可以编写AOP模块。

advice 你想向别的类内部不同的地方注入的代码,即你关注的Aspect;

pointcut 定义了需要注入advice的位置,通常是某个特定的类的一个public方法。

advisor  是pointcut和advice的装配器,需要在配置文件中指明两个属性:advice和pattern,前者是你自己写的请求注入的类,做一些比如加日志,判断是否有权限等的事情,pattern指你需要拦截的接口及其方法。

  <!--CONFIG-->
  <bean id="bean" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="proxyInterfaces">
      <value>org.chage.springtest.Bean</value>
    </property>
    <property name="target">
      <ref local="beanTarget"/>
    </property>
    <property name="interceptorNames">
      <list>
        <value>theAdvisor</value>
        <value>theAdvisor2</value>
      </list>
    </property>
  </bean>

  <!--REAL CLASS-->
  <bean id="beanTarget" class="org.chage.springtest.BeanImpl"/>

  <bean id="theAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
    <property name="advice">
      <ref local="theBeforeAdvice"/>
    </property>
    <property name="pattern">
      <value>org/.chage/.springtest/.Bean/.execute</value>
    </property>
  </bean>
  <!--ADVICE-->                    
  <bean id="theBeforeAdvice" class="org.chage.springtest.TestBeforeAdvice"/>

注意两处蓝色标识处,前一处说明可以给被请求bean加多个拦截器类,这里的次序比较重要,就是实际被调用执行的次序。后一处说明了监听的方法,注意写法。

最后,来点废话。这两天学习的劲头很高,白天吸收了很多东东,晚上躺在床上大脑还在反刍,感觉象一个RPG游戏中的小角色在打怪练级,hoho,经验值嗖嗖地往上涨,满心欢喜呀,充实啊。我渴望成为下一个“马鲁奇”(注:韩国电影”阿罗汉“中称拥有极高天份的修行者突然开悟后为马鲁奇)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值