java spring核心技术AOP面向切面编程图文并茂包含例子demo

2024-01-03 14:53:33

base

  • Aspect-oriented programming
  • 面向切面的程序设计
  • 用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect)
  • 场景: 权限认证,日志和事务处理.

Snipaste_2022-08-24_11-32-38

demo

基本背景

// 背景: 1. 模拟数据库操作增删改查  2. 每次操作之前新增权限校验,操作之后新增日志记录 
// spring06-aop1/src
// ├── main
// │   ├── java
// │   │   └── com.ah.service
// │   │       ├── User.java
// │   │       └── UserServiceImpl.java
// │   └── resources
// └── test
//     └── java
//         └── Test.java

// User.java 定义接口
package com.ah.service;
public interface User {
   
    void add(int id, String name);
    void delete(int id);
    void update(int id, String name);
    void query(int id);
}
// UserServiceImpl.java 实现类  
package com.ah.service;
public class UserServiceImpl implements User{
   
    public void add(int id, String name) {
   
        System.out.println("模拟add...");
    }
    public void delete(int id) {
   
        System.out.println("模拟delete...");
    }
    public void update(int id, String name) {
   
        System.out.println("模拟update...");
    }
    public void query(int id) {
   
        System.out.println("模拟query...");
    }
}
// Test.java 调用类的方法
import com.ah.service.UserServiceImpl;
public class Test {
   
    public static void main(String[] args) {
   
        UserServiceImpl u = new UserServiceImpl();
        u.add(1,"张三");
        u.delete(1);
        u.update(1,"李四");
        u.query(1);
    }
}
// 效果
// 模拟add...
// 模拟delete...
// 模拟update...
// 模拟query...

jdk 动态代理

// 需求: 每次操作之前新增权限校验,操作之后新增日志记录 
// 实现: 通过 jdk 动态代理实现
// JDK 动态代理 是基于JDK 不需要额外引入包

// User.java 定义接口 同上
// UserServiceImpl.java 实现类  同上
// Test.java 调用类的方法
import com.ah.service.User;
import c

文章来源:https://blog.csdn.net/qubes/article/details/135362461
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。