Spring通过注解完成AOP操作
引入相应的Jar包
- aspectj依赖aop环境.
- spring-aspects-3.2.0.RELEASE.jar
- com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
编写要被增强的类(实际主要操作的类,切入点)
假设该类是UserDao- 书写切面类(其实就是 切点和增强的组合)
@Aspect //定义切面
public class MyAspect {
@Before("execution(* cn.spring3.demo1.UserDao.add(..))")//前置通知
public void before(JoinPoint joinPoint){
System.out.println("前置增强...."+joinPoint);
}
@AfterReturning(value="execution(* cn.spring3.demo1.UserDao.update(..))",returning="returnVal")
public void afterReturin(Object returnVal){
System.out.println("后置增强:"+returnVal);
}
}
@Aspect使用注解定义该类是一个切面类,execution
@Before是spring提供的AOP注解,还有Around等等,
里面的参数execution,第一个*表示返回任意类型,之后的是正则表达,表示在当下包下面的 userDao的add方法调用时增强。
4. 创建applicationContext.xml
引入AOP约束,当引入约束后,敲代码时没有出现相应的AOP提示,则需要自己手动添加约束,可以在属性里面找web ca…手动引入约束。
<aop:aspectj-autoproxy />
<bean id="userDao" class="cn.spring3.demo1.UserDao"></bean>
<bean id="myAspect" class="cn.spring3.demo1.MyAspect"></bean>
- Test方法
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringTest1 {
@Autowired
@Qualifier("userDao")
private UserDao userDao;
@Test
public void demo1(){
userDao.add();
}
运行效果:
前置增强….execution(void cn.spring3.demo1.UserDao.add())
添加用户
另外springAOP操作还有基于xml文件的操作,晚点定时更新。