快速业务通道

Spring 1.2和2.0的简单AOP例子 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
带来了所有和这次方法调用有关的信息,包括方法参数,目标对象等等,所以一般要做日志记录的话会带上它。

接下来是测试类的代码,和以前的几乎没有任何不同,只不过现在直接访问的是man这个bean。源码如下所示:

import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; publicclass AOPTest { publicstaticvoid main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); Man man = (Man) ctx.getBean("man"); man.qq(); man.mm(); } }

清单10.11 测试类AOPTest源码

Spring 1.2和2.0的简单AOP例子(6)

时间:2011-09-14

这个类的执行结果和上面的例子是类似的,如下所示:

log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext). log4j:WARN Please initialize the log4j system properly. FBI 发现张三正在进行 qq 活动。 我在聊QQ FBI 发现张三正在进行 mm 活动。 我在泡MM

下面再介绍配置文件的写法,先看看完整的配置文件代码:

<?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"> <bean id="fbi" class="FBI" /> <bean id="man" class="Man"> <property name="name"> <value type="java.lang.String">张三</value> </property> </bean> <aop:config> <aop:pointcut id="manPointcut" expression="execution(* Man.*(..))" /> <aop:aspect id="beforeExample" ref="fbi"> <aop:before pointcut-ref="manPointcut" method="before" /> </aop:aspect> </aop:config> </beans>

清单10.12 AOP XML格式配置文件源码applicationContext.xml

将这个配置文件的代码和清单10.8进行对比,可以看到两个不同:

1. 配置文件的开头加入了aop命名空间,如代码中粗斜体所示。

2. 使用aop:config标签来定义AOP,不是使用ProxyFactoryBean来定义一个新的bean。

简要介绍一下这个配置。两个bean的定义都没有什么大的变化,一个是人的对象,另一个则是联邦调查局的探员。而aop:config中定义了所有的AOP设置信息。aop:pointcut定义了一个切入点,id给出了这个切入点的唯一名字,而expression定义了切入点的表达式,那么这个定义到底表示了什么信息呢?它的意思是表示一种场景,即执行(execution)Man对象的所有方法的这种情况,这就是表达式execution(* Man.*(..))的意义所在,Man.*(..)表示Man类的所有方法。接下来呢,需要定义一个切面,用aop:aspect来定义,它的ref属性指定了这个切面所对应的bean定义的id,这里指向fbi这个bean类;子标签aop:before则指示了当发生了名为manPointcut的切入点(情况)前(用pointcut-ref属性指定,pointcut-ref=”manPointcut”)

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号