首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> 开源技术 >> Spring >> 正文

Java编程—Spring AOP本质(6)

文章来源本站原创 作者佚名 更新时间2008-5-15 保存本文保存本文 推荐给好友推荐给好友 收藏本页收藏本页
 
import org.aopalliance.aop.Advice;
import org.springframework.aop.Advisor;
import org.springframework.aop.Pointcut;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.support.DefaultPointcutAdvisor;

/**
* 客户端测试
*/
public class StaticPointcutExample {

    public static void main(String[] args) {
        //创建目标对象
        BeanOne one = new BeanOne();
        BeanTwo two = new BeanTwo();

        //定义代理对象
        BeanOne proxyOne;
        BeanTwo proxyTwo;

        //创建一个切入点
        Pointcut pc = new SimpleStaticPointcut();
        //创建一个通知
        Advice advice = new SimpleAdvice();
        //创建一个通知者(即通知和切入点的结合)
        Advisor advisor = new DefaultPointcutAdvisor(pc, advice);

        //创建一个代理工厂
        ProxyFactory pf = new ProxyFactory();
        //将方面加入工厂
        pf.addAdvisor(advisor);
        //将目标加入工厂
        pf.setTarget(one);
        //获取代理对象产品
        proxyOne = (BeanOne) pf.getProxy();  //这个时候会进行匹配检查

        //创建一个代理工厂
        pf = new ProxyFactory();
        pf.addAdvisor(advisor);
        pf.setTarget(two);
        proxyTwo = (BeanTwo) pf.getProxy();

        /*
       org.springframework.aop.framework.ProxyFactory中
       设置的代理目标一次仅能一个,这点不要犯迷糊,我查过源码了.
      */

        //从代理产品上调用目标方法
        proxyOne.foo();
        proxyTwo.foo();

        proxyOne.bar();
        proxyTwo.bar();

    }
}
 
运行结果:
- Using JDK 1.4 collections
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne类!
切入点方法匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne的foo方法!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne类!
切入点方法匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne的bar方法!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne类!
切入点方法匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne的hashCode方法!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne类!
切入点方法匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne的toString方法!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanTwo类!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanTwo类!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanTwo类!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanTwo类!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne类!
切入点方法匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne的foo方法!
>> 业务方法调用前动作,被代理调用目标方法是: foo
BeanOne的foo()被调用!
>> 业务方法调用结束后动作!
BeanTwo的foo()被调用!
BeanOne的bar()被调用!
BeanTwo的bar()被调用!

Process finished with exit code 0

上一页  [1] [2] [3] 

【责编:Ken】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航