第二十章 AOP开发中的坑

  1. 问题
//在同一个业务类中,一个业务方法调用另一个业务方法
//问题: login方法添加有额外功能
//      register方法没有添加额外功能
public class UserServiceImpl implements UserService {
    @Override
    public void login(String username, String password) {
        System.out.println("UserServiceImpl.login");
        this.register(new User());
    }

    @Override
    public void register(User user) {
        System.out.println("UserServiceImpl.register");
    }
}
  1. 分析
调用login方法的,是代理对象,而调用register方法的,是原始对象,所以没有加上额外功能

能不能在login方法中再获取一个代理对象,从而使代理对象调用register方法呢?

不能,我们知道Spring工厂是一个重量级资源,一个应用应当创建一个Spring工厂
  1. 解决
使业务类再实现ApplicationContextAware接口
实现接口的setApplicationContext方法,这个方法的作用是获取创建的Spring工厂对象
  1. 编码
public class UserServiceImpl implements UserService, ApplicationContextAware {
    private ApplicationContext context;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.context = applicationContext;
    }

    @Override
    public void login(String username, String password) {
        System.out.println("UserServiceImpl.login");
        UserService userService = (UserService) context.getBean("userService");
        userService.register(new User());
    }

    @Override
    public void register(User user) {
        System.out.println("UserServiceImpl.register");
    }
}

Original: https://www.cnblogs.com/suwuji/p/16514906.html
Author: 苏无及
Title: 第二十章 AOP开发中的坑

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612588/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 实现线程的两种方式

    实现Runnable接口如果当前类 不仅要继承其他类( 非Thread类), 还要实现多线程,那么 只能通过当前类实现 Runnable接口来 创建Thread类对象。 实现Run…

    数据库 2023年6月16日
    0115
  • Golang并发编程——goroutine、channel、sync

    并发与并行 并发和并行是有区别的,并发不等于并行。 两个或多个事件在同一时间不同时间间隔发生。对应在Go中,就是指多个 goroutine 在单个CPU上的交替运行。 两个或者多个…

    数据库 2023年6月16日
    056
  • Java8Stream流

    Stream流呢,以前我也有所了解,像一些面试题中也出现过,Java8的新特性,有一块就是这个Stream操作集合,而且在看一些项目中也使用的比较多。但总感觉自己学的一知半解,所以…

    数据库 2023年6月11日
    079
  • day43-反射02

    Java反射02 2.Class类 2.1基本介绍 Class类也是类,因此也继承Object类 Class类对象不是new出来的,而是系统创建的 对于某个类的Class类对象,在…

    数据库 2023年6月11日
    080
  • Virtualbox中ubuntu18配置静态ip地址及DNS

    python开发环境:VirtualBox+Ubuntu18.04 每当我重启电脑重新打开VirtualBox,Ubuntu中的IP地址都会改变,这样,我的开发软件的连接解析地址也…

    数据库 2023年6月6日
    0122
  • java XML标记语言

    可扩展标记语言( Extensive Markup Language),标签中的元素名是可以自己随意写,可拓展是相对于html来说 标记语言:由一对尖括号括起来 用来当做配置文件 …

    数据库 2023年6月16日
    077
  • MySQL高可用安装

    MySQL HA部署 环境准备 创建本地yum源 确认关闭 SELinux 防火墙设置 MySQL安装 使用 root 用户操作创建相关的用户组和用户 上传/解压介质 设置自启动 …

    数据库 2023年6月16日
    063
  • ReentrantLock 公平锁源码 第1篇

    ReentrantLock 1 这篇还是接着ReentrantLock的公平锁,没看过第0篇的可以先去看上一篇https://www.cnblogs.com/sunankang/p…

    数据库 2023年6月16日
    0110
  • 记一次配置Linux服务器配置ssh登陆方式

    测试系统信息: 1.在目标机器中添加文件 vi /root/.ssh/authorized_keys //创建文件authorized_keys, 需要使用哪个用户登录,就在对应的…

    数据库 2023年6月11日
    086
  • Sql的字符串匹配 like

    患者信息表: Patients +————–+———+ | Column Name | Type | +————–+——–…

    数据库 2023年6月14日
    078
  • kettle插入更新

    kettle实现若主键存在则更新,若主键不存在则插入 Original: https://www.cnblogs.com/cheng9999/p/14085922.htmlAuth…

    数据库 2023年6月16日
    070
  • MySQL45讲之前缀索引

    本文介绍了字符串前缀索引的优缺点,以及当字符串的区分度不高时如何建立索引。 [En] This article introduces the advantages and disa…

    数据库 2023年5月24日
    077
  • 三道MySQL联合索引面试题,淘汰80%的面试者,你能答对几道

    众所周知MySQL 联合索引遵循最左前缀匹配原则,在少数情况下也会不遵循(有兴趣,可以翻一下上篇文章)。 创建 联合索引的时候,建议优先把区分度高的字段放在第一列。 至于如何计算分…

    数据库 2023年5月24日
    072
  • 通过Python收集汇聚MySQL 表信息

    一.需求 统计收集各个实例上table的信息,主要是表的记录数及大小。 收集的范围是cmdb中所有的数据库实例。 二.公共基础文件说明 1.配置文件 配置文为db_servers_…

    数据库 2023年6月16日
    0114
  • 多商户商城系统功能拆解25讲-平台端分销申请

    多商户商城系统,也称为B2B2C(BBC)平台电商模式多商家商城系统。可以快速帮助企业搭建类似拼多多/京东/天猫/淘宝的综合商城。 多商户商城系统支持商家入驻加盟,同时满足平台自营…

    数据库 2023年6月14日
    079
  • Java学习-第一部分-第一阶段-第八节:项目-房屋出租系统

    项目-房屋出租系统 笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 房屋出租系统-需求 ●项目需求说明 实现基于…

    数据库 2023年6月11日
    073
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球