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"); } }
浙公网安备 33010602011771号