Spring如何使用註解完成AOP
阿新 • • 發佈:2018-11-10
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檔案的操作,晚點定時更新。