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();
    }
}
相关推荐
JH30736 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
2301_8187320610 小时前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea
码字的字节10 小时前
Spring Cloud服务注册与发现(一):手把手搭建Eureka Server,详解高可用配置
spring·spring cloud·eureka
大厂资深架构师10 小时前
Spring Cloud Eureka在后端系统中的服务剔除策略
spring·spring cloud·ai·eureka
暮色妖娆丶13 小时前
Spring 源码分析 单例 Bean 的创建过程
spring boot·后端·spring
7哥♡ۣۖᝰꫛꫀꪝۣℋ15 小时前
微服务负载均衡
spring·微服务
Boop_wu16 小时前
Spring生态
java·后端·spring
清水白石00818 小时前
深入解析 LRU 缓存:从 `@lru_cache` 到手动实现的完整指南
java·python·spring·缓存
夕除18 小时前
js--15
java·jvm·spring