Spring_2023_11_21_4 AOP面向切面编程--Spring编写代理=》AOP(全自动化)

发布时间 2023-11-21 18:20:15作者: Kbaor

Spring编写代理=》AOP(全自动化)

  1. 引入依赖
<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.8.7</version>
</dependency>

  1. 目标类与切面类参考:半自动化中的设置
  2. 代理类: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>
  1. 测试类
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();
    }
}

运行结果展示:
image