首先root-context.xml配置文件如下
需要加入对SpringAOP的支持
<?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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<aop:aspectj-autoproxy/>
<bean
class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />
<bean id="aop" class="com.util.Aop" />
<bean id="student" class="com.service.StudentService" />
</beans>
AOP类的具体内容如下
package com.util;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class Aop {
@Pointcut("execution(* com.service.*.*(..))")
public void allwelcome(){
}
@Before("allwelcome()")
public void before(){
System.out.println("__________________before welcome_________________");
}
}
在AOP类里,首先需要加入标签@Aspect来表明这是一个切面类,然后@Pointcut("execution(*com.service.*.*(..))")来选中需要被切的方法,*.*表示类里的方法,..表示匹配任意参数。
然后用@Before("allwelcome()")来声明在执行函数allwelcome()之前执行before方法,类似的还有@After等。
测试方法如下:
public class AopTestMain {
/**
* method description goes here
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext act = new ClassPathXmlApplicationContext("../../root-context.xml");
StudentService student = (StudentService) act.getBean("student");
student.welcome("steven");
}
}
SpringAOP最重要的就是
@Aspect定义切面类
@Pointcut("execution(*com.service.*.*(..))")定义切点和切面方法
@Before("allwelcome()")定义切点和切面方法
...
最后SpringAOP还可以从切点传参数给切面方法。