网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > 开源技术 > Spring > 关于Spring切点函数@args()  

关于Spring切点函数@args()

2008-06-15  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

    今天在做AspectJ的时间遇到点小问题,看到好多网友在网上问,就写一个例子出来,供大家参考

    简单的说如果@args(com.myapp.Test)是表示有且仅有一个入参且入参对象的类标注@Test注解。 网管网www_bitscn_com

    如果还不明白的话,看下面的例子,: 网管联盟bitsCN_com

    先把代码写出来:
    任意定义一个空ANNOTATION(注解类)
    package cn.kingfengks.aspectJaop.test;
    import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; 中国网管论坛bbs.bitsCN.com

    @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Monitorable {
    } 网管u家u.bitscn@com

    标记了注解的类

中国网管联盟bitsCN.com

    package cn.kingfengks.aspectJaop.test;

网管联盟bitsCN@com

    @Monitorable //关键 public class NaiveWaiter implements Waiter {  public void greetTo(String clientName) {   System.out.println("NaiveWaiter:greet to "+clientName+"...");  }
     public void serveTo(String clientName){   System.out.println("NaiveWaiter:serving "+clientName+"...");  }  public void smile(String clientName,int times){   System.out.println("NaiveWaiter:smile to  "+clientName+ times+"times...");  }  }
    切面类
    package cn.kingfengks.aspectJaop.test;

网管论坛bbs_bitsCN_com

    import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before;
    @Aspect public class PreGreetingAspect {  /*   * @args test   */  @Before("@args(cn.kingfengks.aspectJaop.test.Monitorable)") //标记@Args  public void argsSell(){   System.out.println("Test @args successful!");  } }
    主函数
     public static void main(String[] args) {
         String configPath = "cn/kingfengks/aspectJaop/test/applicationContext.xml";   ApplicationContext ctx = new ClassPathXmlApplicationContext(configPath);
      //-----@args test------//   WaiterManager wm = (WaiterManager)ctx.getBean("waiterManager");     NaiveWaiter waiter3 = new NaiveWaiter();   NaiveWaiter waiter4 = (NaiveWaiter) ctx.getBean("naiveWaiter");//两种方法做对比,前一种没用代理,没有注入切点函数

网管u家u.bitsCN.com


      wm.addNaiveWaiter(waiter3);   wm.addWaiter(waiter4); 网管联盟bitsCN_com

    配置文件
    <bean id="naiveWaiter" class="cn.kingfengks.aspectJaop.test.NaiveWaiter"></bean>  <bean id="waiterManager" class="cn.kingfengks.aspectJaop.test.WaiterManager"></bean> //一定要在配置文件里配置调用目标方法的类

网管bitscn_com

     <bean class="cn.kingfengks.aspectJaop.test.PreGreetingAspect"></bean>  <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>//一定要有proxy-target-class="true 的属性,就是说一定要用CGLIB代理,JDK代理支持接口
    希望你看明白了

网管u家u.bitsCN.com


TAGs   函数   关于       <   public   import   clientName   //   void      
 上一篇:Spring中事务的传播属性详解   下一篇:关于String对象解析
关于Spring切点函数@args() 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: