开发环境:Eclipse+JBossIDE 一AOP的拦截器应用 新建AOP工程在新建向导中选择JBossAOP下的JBossAOP Project输入项目名为:TestAOPJava Version为Java 结束向导 系统自动生成AOP配置文件jbossaopxml文件内容如下: <?xml version= encoding=UTF standalone=yes?> <aop/> 新建Java类名为Test勾选main方法代码如下: package test; publicclass HelloAOP { /** *@paramargs */ publicstaticvoid main(String[] args) { // TODO自动生成方法存根 HelloAOP hello= new HelloAOP(); hellosayHello(); } publicvoid sayHello(){ Systemoutprintln(Hello); } } 新建拦截器名为HelloAOPInterceptorjava并实现Interceptor接口代码如下: package test; import orgjbossaopadviceInterceptor; import orgjbossaopjoinpointInvocation; publicclass HelloAOPInterceptor implements Interceptor { public String getName() { // TODO自动生成方法存根 returntestHelloAOPInterceptor; } public Object invoke(Invocation arg) throws Throwable { // TODO自动生成方法存根 Systemoutprintln(HelloAOP!); return arginvokeNext(); } } 将拦截器和要拦截的类用设置文件联系起来在包资源管理视图下右击类HelloAOP的sayHello方法在弹出菜单中选择JBoss AOP>Apply Interceptor(s)…在Select an Interceptor面板选择testHelloAOPInterceptor拦截器类系统自动更新jbossaopxml文件代码为: <?xml version= encoding=UTF standalone=yes?> <aop> <bind pointcut=execution(public void testHelloAOP>sayHello())> <interceptor class=testHelloAOPInterceptor/> </bind> </aop> 右击HelloAOP类在弹出菜单中选择运行方式>运行…在对话框中选择JBoss AOP Application新建配置项单击运行按钮控制台出现如下信息: HelloAOP! Hello 即拦截器在sayHello方法调用前被调用 二AOP的Advice应用 新建Java类名为:HelloAOPAspectjava代码如下: package test; import orgjbossaopjoinpointInvocation; publicclass HelloAOPAdvice { public Object trace(Invocation invocation) throws Throwable{ Systemoutprintln(进入程序运行点); try { return invocationinvokeNext(); }finally { // TODO: handle exception Systemoutprintln(离开程序运行点); } } } 与HelloAOP文件联系起来在包资源管理视图下右击类HelloAOP的sayHello方法在弹出菜单中选择JBoss AOP>Apply Advice…在Apply Advice…面板勾选Object trace(Invocation invocation)系统自动更新jbossaopxml文件代码为: <?xml version= encoding=UTF standalone=yes?> <aop> <aspect class=testHelloAOPAdvice scope=PER_VM/> <bind pointcut=execution(public void testHelloAOP>sayHello())> <interceptor class=testHelloAOPInterceptor/> <advice aspect=testHelloAOPAdvice name=trace/> </bind> </aop> 利用刚新建的运行配置运行HelloAOPjava文件控制台出现如下信息: HelloAOP! 进入程序运行点 Hello 离开程序运行点 从此处可看到Advice在Interceptor之后介入且方法sayHello()调用前后都起作用 三AOP类中的域应用 修改HelloAOP代码添加私有变量message利用源代码菜单实现其Getter/Setter方法修改main方法完整代码如下: package test; publicclass HelloAOP { /** *@paramargs */ private String message=Welcome; publicstaticvoid main(String[] args) { // TODO自动生成方法存根 HelloAOP hello=new HelloAOP(); hellosayHello(); Systemoutprintln(hellogetMessage()); hellosetMessage(Benson); Systemoutprintln(hellogetMessage()); } publicvoid sayHello(){ Systemoutprintln(Hello); } public String getMessage() { returnmessage; } publicvoid setMessage(String message) { ssage = message; } } 在包资源管理视图下右击类HelloAOP的域message在弹出菜单中选择JBoss AOP>Apply Interceptor(s)…在Select an Interceptor面板选择testHelloAOPInterceptor拦截器类系统自动更新jbossaopxml文件文件内容为: <?xml version= encoding=UTF standalone=yes?> <aop> <aspect class=testHelloAOPAdvice scope=PER_VM/> <bind pointcut=execution(public void testHelloAOP>sayHello())> <interceptor class=testHelloAOPInterceptor/> <advice aspect=testHelloAOPAdvice name=trace/> </bind> <bind pointcut=field(private javalangString testHelloAOP>message)> <interceptor class=testHelloAOPInterceptor/> </bind> </aop> 利用刚新建的运行配置运行HelloAOPjava文件控制台出现如下信息: HelloAOP! HelloAOP! 进入程序运行点 Hello 离开程序运行点 HelloAOP! Welcome HelloAOP! HelloAOP! Benson 当域message被访问时(调用get或set时)都会调用拦截器可以看得出拦截器在对象初始化时对域message也起作用 利用相似的方法可以给域message设置advice在包资源管理视图下右击类HelloAOP的域message在弹出菜单中选择JBoss AOP>Apply Advice…在Apply Advice…面板勾选Object trace(Invocation invocation)系统自动更新jbossaopxml文件代码为: <?xml version= encoding=UTF standalone=yes?> <aop> <aspect class=testHelloAOPAdvice scope=PER_VM/> <bind pointcut=execution(public void testHelloAOP>sayHello())> <interceptor class=testHelloAOPInterceptor/> <advice aspect=testHelloAOPAdvice name=trace/> </bind> <bind pointcut=field(private javalangString testHelloAOP>message)> <interceptor class=testHelloAOPInterceptor/> <interceptor class=testHelloAOPInterceptor/> <advice aspect=testHelloAOPAdvice name=trace/> </bind> </aop> 利用刚新建的运行配置运行HelloAOPjava文件控制台出现如下信息: HelloAOP! HelloAOP! 进入程序运行点 离开程序运行点 HelloAOP! 进入程序运行点 Hello 离开程序运行点 HelloAOP! HelloAOP! 进入程序运行点 离开程序运行点 Welcome HelloAOP! HelloAOP! 进入程序运行点 离开程序运行点 HelloAOP! HelloAOP! 进入程序运行点 离开程序运行点 Benson |