Spring编写代理=》AOP(全自动化)
- 引入依赖
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
- 目标类与切面类参考:半自动化中的设置
- 代理类:spring核心的配置文件中,使用aop标签
引入aop命名空间
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--1.创建目标类-->
<bean id="userService" class="com.bboy.service.impl.UserServiceImpl"/>
<!--2.创建切面类-->
<bean id="myLogAspect" class="com.bboy.aspect.MyLogAspect"/>
<!--
3. 代理类;aop编程
3.1 引入aop的命名空间
3.2 使用<aop:config>进行配置
3.2.1 proxy-target-class: 是否强制使用cglib(字节增强码框架)
3.3 aop:pointcut : 切入点,指的是目标类中的具体的方法,例如: addUser()/updateUser()/...
3.3.1 具体的方法指; UserServiceImpl中具体的方法,例如addUser()/updateUser()/deleteUser方法
3.3.2 expression :表示执行的方法
1. expression(Void com.bboy.service.impl.UserServiceImpl.addUser())
执行(返回值 包名.目标类类目.方法名(参数列表))
2. execution(* com.bboy.service.impl.*.*(..))
3.4 aop:advisor : 整合切入点和切面类
例如:在UserServiceImpl.addUser()设置切入点,将切面类和切入点结合
3.4.1 advice-ref : 切面类
3.4.2 pointcut-ref : 切入点
-->
<aop:config proxy-target-class="true">
<aop:pointcut id="myPointCut" expression="execution(* com.bboy.service.impl.*.*(..))"/>
<aop:advisor advice-ref="myLogAspect" pointcut-ref="myPointCut"/>
</aop:config>
</beans>
- 测试类
package com.bboy.dao;
import com.bboy.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @类描述:
* @作者:秦帅
* @时间:2023/11/21 0021 17:12:20
*/
public class Demo {
public static void main(String[] args) {
//-:获取 spring 容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext01.xml");
//-: 从容器中获取代理类
UserService userService = (UserService) context.getBean("userService");
userService.updateUser();
userService.deleteUser();
userService.addUser();
}
}
运行结果展示: