| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
今天在做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;
@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;
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
配置文件
<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代理支持接口
希望你看明白了
|
0
|
评论加载中…