AOP名词解释
-
名词解释
名词 解释 连接点 JoinPoint , 被代理类中所有方法 切入点 Pointcut , 被代理类中具有共性功能的方法 通知 Advice,将共性功能独立抽取成的方法 切面 Aspect,通知和切入点的位置关系 目标对象类 包含切入点的类 通知类 包含通知的类 织入 将通知和切入点放到一起并执行 -
需求
完成用户记录的增删改擦,在添加用户、修改用户功能中添加权限校验、日志记录两个辅助功能 -
开发步骤
-
①引入依赖
-
spring-aop
-
spring-aspects
-
-
②编写目标对象类
-
写切入点
-
-
③编写通知类
-
写通知
-
-
④编写spring配置文件
-
定义切面关系(通知和切入点关系)
-
-
⑤代码测试
代码实现
引入依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.3.9</version>
</dependency>
编写目标对象类
@Service
public class UserServiceImpl implements UserService {
public void addUser() {
System.out.println("UserService ... addUser");
}
public void deleteUser() {
System.out.println("UserService ... deleteUser");
}
public void updateUser() {
System.out.println("UserService ... updateUser");
}
public void selectUserList() {
System.out.println("UserService ... selectUserList");
}
}
编写通知类
@Component
public class MyAdvice {
public void check(){
System.out.println("权限校验");
}
public void writeLog(){
System.out.println("日志记录");
}
}
编写spring配置文件
定义切面关系(通知和切入点关系)
<!-- 定义切面:(通知和切入点的关系)-->
<aop:config>
<aop:aspect ref="myAdvice">
<aop:before method="check" pointcut="execution(void com.va1m.service.impl.UserServiceImpl.addUser())"></aop:before>
<aop:after method="writeLog" pointcut="execution(void com.va1m.service.impl.UserServiceImpl.addUser())"></aop:after>
</aop:aspect>
</aop:config>
测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-core.xml")
public class AopTest {
@Autowired
UserService userService;
@Test
public void test01(){
userService.addUser();
}
}