静态实现(AspectJ)

来源:互联网 发布:印巴分治原因知乎 编辑:程序博客网 时间:2024/06/06 16:29

 本方式实现主要在于配置
包:
aspectjrt.jar
asm-2.2.3.jar
asm-commons-2.2.3.jar
asm-util-2.2.3.jar
spring.jar
cglib-nodep-2.1_3.jar
log4j-1.2.11.jar
commons-logging-1.0.4.jar
配置:AOP.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="
http://www.springframework.org/schema/beans"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="
http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
    <aop:config proxy-target-class="true">
        <aop:aspect ref="aspect">
           <aop:before
           pointcut="target(aopimp5.WaiterImp) and execution(* sayHello(..))"
           method="pointCutFun" />
        </aop:aspect>
    </aop:config>
    <bean id="aspect" class="aopimp5.TestAspect" />
    <bean id="waiter" class="aopimp5.WaiterImp" />
</beans>

1.
public interface Waiter {
    void sayHello(String str);
}
2.
public class WaiterImp implements Waiter {
    public void sayHello(String str) {
        System.out.println("+++++++++++ Hello "+str+" ++++++++++++=");
    }
}
3.
public class TestAspect {
    public void pointCutFun(){
        System.out.println("====== this is point cut =============");
    }
}
4.
public class Main {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("/AOP.xml"); //只能用ApplicationContext方式
        Waiter w = (Waiter)ctx.getBean("waiter");
        w.sayHello("Bill");
    }
}