快速业务通道

Spring + Eclipse开发入门 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
rn encrypt.toString();    } }

这个PasswordAdvisor将截获ServiceBean的getPassword()方法的返回值,并将其改为"***"。继续修改beans.xml:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>    <bean id="serviceTarget" class="com.crackj2ee.example.spring.MyServiceBean" />    <bean id="logAdvisor" class="com.crackj2ee.example.spring.LogAdvisor" />    <bean id="passwordAdvisorTarget" class="com.crackj2ee.example.spring.PasswordAdvisor" />    <bean id="passwordAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">      <property name="advice">        <ref local="passwordAdvisorTarget"/>      </property>      <property name="patterns">        <list>          <value>.*getPassword</value>        </list>      </property>    </bean>    <bean id="service" class="org.springframework.aop.framework.ProxyFactoryBean">      <property name="proxyInterfaces"><value>com.crackj2ee.example.spring.ServiceBean</value></property>      <property name="target"><ref local="serviceTarget"/></property>      <property name="interceptorNames">        <list>          <value>logAdvisor</value>          <value>passwordAdvisor</value>        </list>      </property>    </bean> </beans>

利用Spring提供的一个RegexMethodPointcutAdvisor可以非常容易地指定要截获的方法。运行结果如下,可以看到返回结果变为"******":

Spring + Eclipse开发入门 - 编程入门网

Spring + Eclipse开发入门(6)

时间:2011-02-09

还需要继续增强ServiceBean?我们编写一个ExceptionAdvisor,在业务方法抛出异常时能做一些处理:

/** * Copyright_2006, Liao Xuefeng * Created on 2006-3-9 */ package com.crackj2ee.example.spring; import org.springframework.aop.ThrowsAdvice; public class ExceptionAdvisor implements ThrowsAdvice {    public void afterThrowing(RuntimeException re) throws Throwable {      System.out.println("[Exception] " + re.getMessage());    } }

将此Advice添加到beans.xml中,然后在业务Bean中删除一个不存在的用户,故意抛出异常:

service.deleteUser("not-exist");

再次运行,注意到ExceptionAdvisor记录下了异常:

Spring + Eclipse开发入门 - 编程入门网

5.总结

利用Spring非常强大的IoC容器和AOP功能,我们能实现非常灵活的应用,让Spring容器管理业务对象的生命周期,利用AOP增强功能,却不影响业务接口,从而避免更改客户端代码。

为了实现这一目标,必须始终牢记:面向接口编程。而Spring默认的AOP代理也是通过Java的代理接口实现的。虽然Spring也可以用CGLIB实现对普通类的代理,但是,业务对象只要没有接口,就会变得难以扩展、维护和测试。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号