基于Annotation的Spring AOP: @Before

来源:互联网 发布:三维家软件下载 编辑:程序博客网 时间:2024/06/07 06:26

AspectJ 允许使用Annotation定义切面、切入点和增强处理,而 Spring框架则可识别并根据这些Annotation来生成AOP代理。Spring只是使用了和AspectJ一样的注解,并没有使用AspectJ的编译器和织入器,底层依然使用的是 Spring AOP,依然是在运行时动态生成AOP代理,并不依赖于AspectJ的编译器或者织入器。

为了启用Spring对@AspectJ切面配置的支持,并保证Spring容器中的目标Bean被一个或多个切面自动增强,必须在配置文件中加如下代码:

<aop:aspectj-autoproxy/>
为了在Spring应用中启动@AspectJ支持,还需要添加 aspectjrt.jaraspectjweaver.jar到工程lib目录下。

Person.java :

public interface Person {public String sayHello(String name);public void eat(String food);}
Chinese.java :
@Componentpublic class Chinese implements Person {@Overridepublic void eat(String food) {System.out.println("我正在吃:"+food);}@Overridepublic String sayHello(String name) {return name+"Hello,Spring AOP";}}
BeforeAdviceTest.java :

/** * 定义一个切面 * @author Administrator * */@Aspectpublic class BeforeAdviceTest {@Before("execution(* com.bean.*.*(..))")public void authority(){System.out.println("模拟执行权限检查");}}
bean.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:context="http://www.springframework.org/schema/context"        xmlns:aop="http://www.springframework.org/schema/aop"        xmlns:tx="http://www.springframework.org/schema/tx"        xsi:schemaLocation="http://www.springframework.org/schema/beans                 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd                http://www.springframework.org/schema/context                 http://www.springframework.org/schema/context/spring-context-2.5.xsd                http://www.springframework.org/schema/tx                http://www.springframework.org/schema/tx/spring-tx-2.5.xsd                http://www.springframework.org/schema/aop                http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">            <context:component-scan base-package="com.bean">        <context:include-filter type="annotation"                  expression="org.aspectj.lang.annotation.Aspect"/>    </context:component-scan>        <aop:aspectj-autoproxy/>     </beans>
Test.java :

public class Test {public static void main(String[] args) {ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");Person p=(Person) ctx.getBean("chinese");System.out.println(p.sayHello("张三"));p.eat("西瓜");}}
运行控制台输出:





原创粉丝点击