007 spring aop(通知)(xml)

文章目录

pom.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.aistart</groupId>
        <artifactId>Spring_demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>Aspect_demo</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.3.30</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.6</version>
        </dependency>
    </dependencies>

</project>

LogAspect.java

java 复制代码
package com.aistart.aspect;

import org.aspectj.lang.ProceedingJoinPoint;


public class LogAspect {

    public void LogInfoAfter(){
        System.out.println("后置日志");
    }
    public void LogInfoBefore(){
        System.out.println("前置日志");
    }

    public void doAfterReturning(String result) {
        System.out.println("后置通知, 返回值: " + result);
    }
    public void doAfterThrowing(Exception e) {
        System.out.println("后置通知, 异常是: " + e);
    }
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("-----------------------");
        System.out.println("环绕通知: 进入方法");
        Object o = pjp.proceed();
        System.out.println("环绕通知: 退出方法");
        return o;
    }
}

StudentServiceImpl.java

java 复制代码
package com.aistart.service.impl;

import com.aistart.service.StudentService;
import org.springframework.stereotype.Service;


@Service
public class StudentServiceImpl implements StudentService {


    @Override
    public void insertStudent() {

        System.out.println("加入一个学生的业务");
//        System.out.println(1/0);

    }
}

StudentService.java

java 复制代码
package com.aistart.service;

public interface StudentService {

    void insertStudent();
}

applicationContext.xml

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:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">


    <context:component-scan base-package="com.aistart.service"></context:component-scan>
    <context:annotation-config></context:annotation-config>
<!--    <bean id="studentService" class="com.aistart.service.impl.StudentServiceImpl"/>-->

    <!--增强类/切面对象-->
    <bean id="logAspect" class="com.aistart.aspect.LogAspect"/>
    <!-- bean definitions here -->

    <aop:config>
        <aop:aspect ref="logAspect">

            <!--代理的功能-->
            <!--execution([修饰符] 返回类型 全限类名.函数名() )-->
            <aop:pointcut id="studentServiceCut" expression="execution(* com.aistart.service.impl.StudentServiceImpl.*(..))"/>
            <aop:pointcut id="studentServiceCut1" expression="execution(* com.aistart.service.impl.StudentServiceImpl.*(..))"/>

            <aop:before method="LogInfoBefore" pointcut-ref="studentServiceCut"></aop:before>
            <aop:after method="LogInfoAfter" pointcut-ref="studentServiceCut"></aop:after>

            <aop:around method="doAround" pointcut-ref="studentServiceCut"></aop:around>
            <aop:after-throwing throwing="e" method="doAfterThrowing" pointcut-ref="studentServiceCut"></aop:after-throwing>
            <aop:after-returning returning="result" method="doAfterReturning" pointcut-ref="studentServiceCut"></aop:after-returning>

        </aop:aspect>

    </aop:config>


</beans>

StudentServiceImplTest.java

java 复制代码
package com.aistart.service.impl;

import com.aistart.service.StudentService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import static org.junit.Assert.*;

public class StudentServiceImplTest {

    @Test
    public void insertStudent() {

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");


        StudentService studentService = context.getBean( StudentService.class);

        studentService.insertStudent();
    }
}
相关推荐
冰帝海岸3 小时前
01-spring security认证笔记
java·笔记·spring
没书读了4 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
代码小鑫7 小时前
A043-基于Spring Boot的秒杀系统设计与实现
java·开发语言·数据库·spring boot·后端·spring·毕业设计
真心喜欢你吖7 小时前
SpringBoot与MongoDB深度整合及应用案例
java·spring boot·后端·mongodb·spring
斗-匕9 小时前
Spring事务管理
数据库·spring·oracle
Doker 多克12 小时前
Spring AI 框架使用的核心概念
人工智能·spring·chatgpt
请叫我青哥15 小时前
第五十二条:谨慎使用重载
java·spring
孟秋与你16 小时前
【spring】spring单例模式与锁对象作用域的分析
java·spring·单例模式
luckywuxn17 小时前
Spring Cloud Alibaba、Spring Cloud 与 Spring Boot各版本的对应关系
spring boot·spring·spring cloud
是程序喵呀17 小时前
SpringMVC详解
java·spring·spring-mvc