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();
    }
}
相关推荐
llwszx4 小时前
深入理解Java锁原理(一):偏向锁的设计原理与性能优化
java·spring··偏向锁
麦兜*8 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
CHENWENFEIc11 小时前
SpringBoot论坛系统安全测试实战报告
spring boot·后端·程序人生·spring·系统安全·安全测试
高兴达11 小时前
RPC--Netty客户端实现
java·spring·rpc
要开心吖ZSH15 小时前
《Spring 中上下文传递的那些事儿》Part 4:分布式链路追踪 —— Sleuth + Zipkin 实践
java·分布式·spring
考虑考虑15 小时前
Springboot3.4.x中的@Bean使用
spring boot·后端·spring
萧曵 丶18 小时前
Spring @TransactionalEventListener
java·数据库·spring·事务·transactional·异步
默默coding的程序猿20 小时前
3.前端和后端参数不一致,后端接不到数据的解决方案
java·前端·spring·ssm·springboot·idea·springcloud
Kyrie_Li20 小时前
(十五)Spring Test
java·后端·spring
RainbowSea21 小时前
补充:问题:CORS ,前后端访问跨域问题
java·spring boot·spring