读书人

Aop署理around例子和需要jar包

发布时间: 2012-07-25 09:43:05 作者: rapoo

Aop代理around例子和需要jar包
需要的jar包:
aspectjrt.jar
aopalliance.jar
aspectjweaver.jar
cglib-nodep-2.1_3.jar

Aop例子:
context_aop.xml配置文件:

<bean id="fooService" /><bean id="aopInject" id="allExecution"/>    <aop:around method="injectMethod" pointcut-ref="allExecution"/>  </aop:aspect></aop:config>


AopInject类, 代理类:
public class AopInject {  public Object injectMethod(ProceedingJoinPoint call) throws Throwable {    System.out.println("AopInject类注入");    return call.proceed();  }}


接口类:
public class Foo {  public Foo(String name, int age){    System.out.println("foo类初始化");  }}public interface FooService {  Foo getFoo(String fooName, int age);}public class DefaultFooService implements FooService {  public Foo getFoo(String name, int age) {    return new Foo(name, age);  }}


执行类:
BeanFactory ctx = new ClassPathXmlApplicationContext("context_aop.xml");FooService foo = (FooService) ctx.getBean("fooService");foo.getFoo("Pengo", 12);


注意事项PS:
一: 如果代理类需要用到代理的值, 例如foo.getFoo("Pengo", 12), 则可以在配置文件中加入expression="execution(* spring.aop.FooService.getFoo(String,int)) and args(name,age)"
代理类的代理方法改为:
public Object injectMethod(ProceedingJoinPoint call,String name,int age)
二: AopInject为代理类,必须有返回值,如果是成功,则返回call.proceed(),这样就可以直接到本体类,否则则不进入本体类

读书人网 >开源软件

热点推荐