切面编程的xml配置
当我们没有源码的时候可以使用xml配置给源程序添加新的业务逻辑。
1.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.login"/>
<bean id="logInterceptor" class="com.login.aop.LogInterceptor"/>
<aop:config>
<aop:pointcut expression="execution(public * com.login.service..*.add(..))"
id="servicePiontcut"/>
<aop:aspect id="logAspect" ref="logInterceptor">
<aop:before method="beforeMethod" pointcut-ref="servicePiontcut"/>
</aop:aspect>
</aop:config>
2.Test
@Test
public void testAdd() throws Exception {
BeanFactory apc = new ClassPathXmlApplicationContext("beans.xml");
UserService service = (UserService) apc.getBean("userService");
service.add(new User());
}
当程序运行到add方法时,发现符合xml中expression="execution(public * com.login.service..*.add(..))"
表达式
还发现其中有一个切面<aop:aspect>...</aop:aspect>
,其中引用了切面逻辑类的对象ref="logInterceptor"
。
<aop:before.../>
在add方法执行之前调用。
<aop:before method="beforeMethod" pointcut-ref="servicePiontcut"/>
方法执行前调用切面逻辑对象的beforeMehod方法。