注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Java >> 核心技术 >> 高级编程 >> Java正文

关于AOP的应用实例

文章来源:中国IT实验室收集整理 作者:佚名 更新时间:2008-6-28 20:32:19 【 】 【加入收藏

    开发环境:Eclipse3.2.1+JBossIDE1.6
    一,AOP的拦截器应用
    1,新建AOP工程,在新建向导中选择JBossAOP下的JBossAOP Project,输入项目名为:TestAOP,Java Version为Java 1.5,结束向导.
    2,系统自动生成AOP配置文件jboss-aop.xml文件,内容如下:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <aop/>
    3,新建Java类,名为Test,勾选main方法,代码如下:
    package test;

    publicclass HelloAOP {

        /**
         *@paramargs
         */
        publicstaticvoid main(String[] args) {
            // TODO自动生成方法存根
            HelloAOP hello= new HelloAOP();
            hello.sayHello();
        }
        publicvoid sayHello(){
            System.out.println("Hello");
        }
    }
    4,新建拦截器.名为HelloAOPInterceptor.java,并实现Interceptor接口,代码如下:
    package test;

    import org.jboss.aop.advice.Interceptor;
    import org.jboss.aop.joinpoint.Invocation;

    publicclass HelloAOPInterceptor implements Interceptor {

        public String getName() {
            // TODO自动生成方法存根
            return"test.HelloAOPInterceptor";
        }

        public Object invoke(Invocation arg0) throws Throwable {
            // TODO自动生成方法存根
            System.out.println("Hello,AOP!");
            return arg0.invokeNext();
        }

    }
    5,将拦截器和要拦截的类用设置文件联系起来,在”包资源管理”视图下,右击类HelloAOP的sayHello方法,在弹出菜单中选择JBoss AOP->Apply Interceptor(s)…,在Select an Interceptor..面板选择test.HelloAOPInterceptor拦截器类,系统自动更新jboss-aop.xml文件,代码为:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <aop>
        <bind pointcut="execution(public void test.HelloAOP-&gt;sayHello())">
            <interceptor class="test.HelloAOPInterceptor"/>
        </bind>
    </aop>
    6,右击HelloAOP类,在弹出菜单中选择”运行方式”->”运行…”,在对话框中选择”JBoss AOP Application”,新建配置项.单击”运行”按钮,控制台出现如下信息:
    Hello,AOP!
    Hello
    即拦截器在sayHello方法调用前被调用.
    二,AOP的Advice应用
    1,新建Java类,名为:HelloAOPAspect.java,代码如下:
    package test;

    import org.jboss.aop.joinpoint.Invocation;

    publicclass HelloAOPAdvice {

        public Object trace(Invocation invocation) throws Throwable{
            System.out.println("进入程序运行点");
            try {
                return invocation.invokeNext();
            }finally {
                // TODO: handle exception
            System.out.println("离开程序运行点");
            }
        }
    }
    2,与HelloAOP文件联系起来,在”包资源管理”视图下,右击类HelloAOP的sayHello方法,在弹出菜单中选择JBoss AOP->Apply Advice…,在Apply Advice…面板勾选Object trace(Invocation invocation),系统自动更新jboss-aop.xml文件,代码为:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <aop>
        <aspect class="test.HelloAOPAdvice" scope="PER_VM"/>
        <bind pointcut="execution(public void test.HelloAOP-&gt;sayHello())">
            <interceptor class="test.HelloAOPInterceptor"/>
            <advice aspect="test.HelloAOPAdvice" name="trace"/>
        </bind>
    </aop>
 

   3,利用刚新建的运行配置运行HelloAOP.java文件,控制台出现如下信息:
    Hello,AOP!
    进入程序运行点
    Hello
    离开程序运行点
    从此处可看到Advice在Interceptor之后介入,且方法sayHello()调用前后都起作用.
    三,AOP类中的域应用
    1,修改HelloAOP代码,添加私有变量message,利用源代码菜单,实现其Getter/Setter方法,修改main方法,完整代码如下:
    package test;

    publicclass HelloAOP {

        /**
         *@paramargs
         */
        private String message="Welcome";

        publicstaticvoid main(String[] args) {
            // TODO自动生成方法存根
            HelloAOP hello=new HelloAOP();
            hello.sayHello();
            System.out.println(hello.getMessage());
            hello.setMessage("Benson");
            System.out.println(hello.getMessage());
        }

        publicvoid sayHello(){
            System.out.println("Hello");
        }

        public String getMessage() {
            returnmessage;
        }

        publicvoid setMessage(String message) {
            this.message = message;
        }

    }
    2, 在”包资源管理”视图下,右击类HelloAOP的域message,在弹出菜单中选择JBoss AOP->Apply Interceptor(s)…,在Select an Interceptor..面板选择test.HelloAOPInterceptor拦截器类,系统自动更新jboss-aop.xml文件,文件内容为:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <aop>
        <aspect class="test.HelloAOPAdvice" scope="PER_VM"/>
        <bind pointcut="execution(public void test.HelloAOP-&gt;sayHello())">
            <interceptor class="test.HelloAOPInterceptor"/>
            <advice aspect="test.HelloAOPAdvice" name="trace"/>
        </bind>
        <bind pointcut="field(private java.lang.String test.HelloAOP-&gt;message)">
            <interceptor class="test.HelloAOPInterceptor"/>
        </bind>
    </aop>
    3, 利用刚新建的运行配置运行HelloAOP.java文件,控制台出现如下信息:
    Hello,AOP!
    Hello,AOP!
    进入程序运行点
    Hello
    离开程序运行点
    Hello,AOP!
    Welcome
    Hello,AOP!
    Hello,AOP!
    Benson
       当域message被访问时(调用get或set时),都会调用拦截器.可以看得出拦截器在对象初始化时,对域message也起作用.
    4,利用相似的方法,可以给域message设置advice.在”包资源管理”视图下,右击类HelloAOP的域message,在弹出菜单中选择JBoss AOP->Apply Advice…,在Apply Advice…面板勾选Object trace(Invocation invocation),系统自动更新jboss-aop.xml文件,代码为:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <aop>
        <aspect class="test.HelloAOPAdvice" scope="PER_VM"/>
        <bind pointcut="execution(public void test.HelloAOP-&gt;sayHello())">
            <interceptor class="test.HelloAOPInterceptor"/>
            <advice aspect="test.HelloAOPAdvice" name="trace"/>
        </bind>
        <bind pointcut="field(private java.lang.String test.HelloAOP-&gt;message)">
            <interceptor class="test.HelloAOPInterceptor"/>
            <interceptor class="test.HelloAOPInterceptor"/>
            <advice aspect="test.HelloAOPAdvice" name="trace"/>
        </bind>
    </aop>
 

   5,利用刚新建的运行配置运行HelloAOP.java文件,控制台出现如下信息:
    Hello,AOP!
    Hello,AOP!
    进入程序运行点
    离开程序运行点
    Hello,AOP!
    进入程序运行点
    Hello
    离开程序运行点
    Hello,AOP!
    Hello,AOP!
    进入程序运行点
    离开程序运行点
    Welcome
    Hello,AOP!
    Hello,AOP!
    进入程序运行点
    离开程序运行点
    Hello,AOP!
    Hello,AOP!
    进入程序运行点
    离开程序运行点
    Benson

  • 上一篇Java:

  • 下一篇Java:
  • 最 新 热 门
     手机开发平台指南、教程和资料介绍
     关于什么叫面向接口编程
     编写高级JavaScript应用代码
     不要验证,直接转化科学计数法
     Eclipse插件开发中实现刷新和重编译介绍
     Java开源技术:Eclipse的使用技巧详解
     配置eclipse 3.2 使用JDK1.5中文JavaAPI
     集成Windows本地应用到Eclipse RCP 程序中
     hibernate.cfg.xml配置文件的说明
     eclipse开发jface时,main.class解决方法
    最 新 推 荐
     JSP高访问量下的计数程序
     得到两个日期之间的间隔天数
     Java的“静态库链接”
     用Java的加密机制来保护你的数据
     使用Java Annotations来管理对象生命周期
     JAVA实现的AZDG加密-解密算法
     基于RSA模型转换框架的开发
     如何重构出DAO模式
     关于AOP的应用实例
     关于数字排列的一个程序
    相 关 文 章

    关于什么叫面向接口编程
    spring AOP面向切面编程
    关于String对象解析
    关于Spring切点函数@args()
    Spring配置事务在DAO层和业务逻辑层
    关于Struts框架简介
    关于JSP与XML的交互
    关于EJB3的一个简单例子
    关于OpensymphonyCache的小介绍
    如何重构出DAO模式

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用