1. 程式人生 > >Spring如何使用註解完成AOP

Spring如何使用註解完成AOP

Spring通過註解完成AOP操作

  1. 引入相應的Jar包

    • aspectj依賴aop環境.
    • spring-aspects-3.2.0.RELEASE.jar
    • com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
  2. 編寫要被增強的類(實際主要操作的類,切入點)
    假設該類是UserDao

  3. 書寫切面類(其實就是 切點和增強的組合)
@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>
  1. 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檔案的操作,晚點定時更新。