流程:
1.创建自定义的 切入类(切面)
2.注册自定义切入类的bean
3.配置切面包括切入点和 通知(方法)
4.测试
具体如下:
1.创建自定义的 切入类(切面)
package com.spring.qq.diy;
public class DiyPointCut {
public void before(){
System.out.println("-----------before--------------");
}
public void after(){
System.out.println("-----------after--------------");
}
}
2.注册自定义切入类的bean
<bean id="diyPointCut" class="com.spring.qq.diy.DiyPointCut"/>
3.配置切面包括切入点和 通知(方法)
<aop:config>
<aop:aspect ref="diyPointCut">
<aop:pointcut id="point" expression=" execution(* com.spring.qq.service.UserServiceImpl.*(..))"/>
<aop:before method="before" pointcut-ref="point"/>
<aop:after method="after" pointcut-ref="point"/>
</aop:aspect>
</aop:config>
4.测试
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
UserService userService = context.getBean("userServiceImpl", UserService.class);
userService.add(3);
userService.multi(3);
}
输出结果为:
-----------before--------------
x = 4.0
-----------after--------------
-----------before--------------
x = 12.0
-----------after--------------
service接口及实现的源码在Spring 9
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
https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id = "userServiceImpl" class="com.spring.qq.service.UserServiceImpl"/>
<bean id="diyPointCut" class="com.spring.qq.diy.DiyPointCut"/>
<aop:config>
<aop:aspect ref="diyPointCut">
<aop:pointcut id="point" expression=" execution(* com.spring.qq.service.UserServiceImpl.*(..))"/>
<aop:before method="before" pointcut-ref="point"/>
<aop:after method="after" pointcut-ref="point"/>
</aop:aspect>
</aop:config>
</beans>
注:
Service和ServiceImpl的代码在文章Sping 11里有.