第一步建立切面类
@Component
@Aspect
public class MyAdvice {
@Pointcut("execution (* com.sunwenxu.e_spring_aop_annotaion.service.impl.*ServiceImpl.*(..))")
private void pointcut() {} // 声明一个切入点,pointcut为切入点名称
@Before("pointcut()")
public void before(){
System.out.println("这是前置通知");
}
@After("pointcut()")
public void after(){
System.out.println("这是后置通知");
}
}
第二步在spring的配置文件中,开启注解的扫描
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">
<!-- 配置注解扫面路径 -->
<aop:aspectj-autoproxy />
<!-- 配置注解扫面路径 -->
<context:component-scan base-package="com.sunwenxu.e_spring_aop_annotaion"></context:component-scan>
</beans>
第三步建立业务的接口和类,方便aop的过滤测试。
public interface UserService {
public void add();
public void del();
public void modify();
}
@Service
public class UserServiceImpl implements UserService {
@Override
public void add() {
System.out.println("add...");
}
@Override
public void del() {
System.out.println("del...");
}
@Override
public void modify() {
System.out.println("modify...");
}
}
第四步编写测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:e_1_applicationContext.xml")
public class Demo {
@Autowired
private UserService userService;
@Test
public void fun01(){
userService.add();
}
}
打印结果
这是前置通知
add...
这是后置通知