Spring API接口

可以将日志记录、性能统计、安全控制、事务处理、异常处理等代码从业务逻辑代码中分离出来,放到一个非业务逻辑的方法中,进而改变这些行为的同时不影响业务逻辑代码;实现了减少重复代码以及模块间低耦合的目的,以此来达到专心处理业务逻辑代码,不用管日志记录、事务控制及权限控制等

跟着遇见狂神说Sring5的课程,实现了一下Aop

这是目录结构

首先,第一步创建环境所需的环境

UserService.java

package org.example.service;

public interface UserService {

    public void Add();
    public void update();
    public void delete();
    public void select();
}

UserServiceImpl.java

package org.example.service;

public class UserServiceImpl implements UserService{

    @Override
    public void Add() {
        System.out.println("add方法被调用,增加了一个用户");
    }

    @Override
    public void update() {
        System.out.println("update方法被调用,修改了一个用户");
    }

    @Override
    public void delete() {
        System.out.println("delete方法被调用,删除了一个用户");
    }

    @Override
    public void select() {
        System.out.println("select方法被调用,查询全部用户");
    }
}

其次,第二步书写一下日志文件执行的目标对象方法

创建Log文件的时候
记得调用这个接口

之后自动生成这个

/**
     * mothod要执行的目标对象方法
     * objects:参数
     * target:目标对象
     * @param method
     * @param objects
     * @param target
     * @throws Throwable
     */
    @Override
    public void before(Method method, Object[] objects, Object target) throws Throwable {

    }

创建AlterLog文件,调用这个AfterReturningAdvice接口,自动生成下面这些

public class AfterLog implements AfterReturningAdvice {
    @Override
    public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
  
    }

第三步,在beans.xml内注册beans

第四步,配置aop,需要导入aop的约束本篇博客的重点

第五步,测试类测试

测试结果截图

在这里附一下,beans.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"
       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">

    <!--注册bean-->
    <bean id="userService" class="org.example.service.UserServiceImpl"/>
    <bean id="log" class="org.example.log.Log"/>
    <bean id="afterLog" class="org.example.log.AfterLog"/>

    <!--配置aop,需要导入aop的约束-->
    <aop:config>
        <aop:pointcut id="pointcut" expression="execution(* org.example.service.UserServiceImpl.*(..))"/>
        <aop:advisor advice-ref="log" pointcut-ref="pointcut"/>
        <aop:advisor advice-ref="afterLog" pointcut-ref="pointcut"/>

    </aop:config>


</beans>
posted @ 2023-05-10 21:51  YE-  阅读(42)  评论(0编辑  收藏  举报