Spring版本: Spring3.0

1. 需要被织入的类:

package com.lk.springdi.service;

import com.lk.springdi.model.User;

public interface IUserService {
    
    int addUser(User user);
    
    void deleteUser(User user);

}

 

package com.lk.springdi.service.impl;

import javax.annotation.Resource;
import org.springframework.stereotype.Service;

import com.lk.springdi.dao.IUserDao;
import com.lk.springdi.model.User;
import com.lk.springdi.service.IUserService;

@Service("userService")
public class UserServiceImpl implements IUserService {
    private IUserDao userDao;

    @Override
    public int addUser(User user) {
        userDao.add(user);
        return 0;
    }

    @Override
    public void deleteUser(User user) {
        System.out.println("delete user");
    }

    public IUserDao getUserDao() {
        return userDao;
    }
    
    @Resource
    public void setUserDao(IUserDao userDao) {
        this.userDao = userDao;
    }
}

2. 切面类

package com.lk.springdi.aop;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LogIntercepter {
    
    @Before("execution(public * com.lk.springdi.service..*.*(..))")
    public void beforeMethod() {
        System.out.println("do some thing before method");
    }
    
    @After("execution(public * com.lk.springdi.service..*.*(..))")
    public void afterMethod() {
        System.out.println("do some thing after method");
    }

}

applilcationContext.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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
    
    <context:annotation-config/>
    <context:component-scan base-package="com.lk.springdi"/>
    
    <aop:aspectj-autoproxy/>

</beans>

测试

    @Test
    public void test1() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        IUserService userService = (IUserService) applicationContext.getBean("userService");
        User user = new User();
        userService.deleteUser(user);
    }

在上面的切面类中,由于每个advice的execution都一样,所以我们可以定义一个PointCut,如下:

package com.lk.springdi.aop;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LogIntercepter {
    @Pointcut("execution(public * com.lk.springdi.service..*.*(..))")
    private void pointCut() {};
    
    @Before("pointCut()")
    public void beforeMethod() {
        System.out.println("do some thing before method");
    }
    
    @After("pointCut()")
    public void afterMethod() {
        System.out.println("do some thing after method");
    }
}

 

 

 

posted on 2013-12-12 22:21  寒岁青松  阅读(102)  评论(0)    收藏  举报