2025年AOP介绍及实现

AOP介绍及实现AOP AOP 面向切面 方面 编程 比如说核心代码在不可更改的情况下 如何让核心代码的功能变强 使用 AOP 编程 AOP 思想的核心就是代理 核心代码就是一个普通人 如何才能让普通人变的万人敌 这个人的本质改变不了 只能穿额外的装备

大家好,我是讯享网,很高兴认识大家。

AOP

  • AOP:面向切面(方面)编程
  • 比如说核心代码在不可更改的情况下,如何让核心代码的功能变强?
  • 使用AOP编程,AOP思想的核心就是代理,核心代码就是一个普通人,如何才能让普通人变的万人敌,这个人的本质改变不了,只能穿额外的装备。额外的装备就是“切面”
  • 没有AOP的业务代码,使用分层思想创建一个添加用户的功能:
    • service业务服务层
      • 作用:业务增强
        • 数据加密、事务控制、中文转码、数据解析
      • 业务接口和实现类
      • UserService接口和UserServiceImpl实现类
    • dao数据操作层
      • 作用:和数据库打交道
      • dao接口和实现类
      • UserDao接口和UserDaoImpl实现类
    • models模型层
      • 实体类(和数据表对应的java类)
      • User类

讯享网

User.java

public class User implements Serializable { private int id; private String name; // 构造和getset省略 } 

讯享网

UserDao.java

讯享网public interface UserDao { void add( User user ); } 

UserDaoImpl.java

public class UserServiceImpl implements UserService { // 依赖dao,要生成get和set private UserDao userDao; public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public void add(User user) { System.out.println("业务层,数据使用MD5和SHA1加密!"); userDao.add(user); } } 

UserService.java

讯享网public interface UserService { void add(User user); } 

UserServiceImpl.java

public class UserServiceImpl implements UserService { @Override public void add(User user) { System.out.println("业务层,数据使用MD5和SHA1加密!"); UserDao ud = new UserDaoImpl(); ud.add(user); } } 

Test.java

讯享网public class Test { public static void main(String[] args) { UserService us = new UserServiceImpl(); User u = new User(1,"张三"); us.add(u ); } } 

执行步骤:

  1. Test是程序的入口
  2. service层进行数据加密,自己无法完成数据库的操作,要依赖dao
  3. dao层进行数据库的操作

配置AOP

  • 创建一个增强类(墙)

Before.java

package aop; import org.springframework.aop.MethodBeforeAdvice; import java.lang.reflect.Method; / * @BelongsProject: spring-AOP * @Author: GuoAn.Sun * @CreateTime: 2020-06-30 10:29 * @Description: 前置增强 */ public class Before implements MethodBeforeAdvice { @Override public void before(Method method, Object[] objects, Object o) throws Throwable { System.out.println("前--------墙----------"); } } 

切入点表达式

具体的add方法

讯享网public boolean add(models.User) 

返回值和参数随便的add方法

public * add(..) 

匹配service.impl层中的所有类的所有方法,参数随便

讯享网* service.impl.*.*(..) servive.impl.A.x(int i) 

匹配service.impl层中的子包下的所有类的所有方法,参数随便

* service.impl..*.*(..) servive.impl.test.A.x(int i) 

任何一个名字以add开头的方法,返回值和参数随便

讯享网* add*(..) 
小讯
上一篇 2025-01-10 12:29
下一篇 2025-01-25 13:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/117455.html