iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >探究实现Aware接口的原理及使用
  • 284
分享到

探究实现Aware接口的原理及使用

Aware接口原理使用Aware接口实现 2023-05-18 08:05:53 284人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言设计&实现Aware 感知接口提供具体能力的接口测试前言 spring 对bean的创建过程做了很完整的封装。但是提供了非常多的扩展接口,供我们使用。这一节主要是实现

前言

spring 对bean的创建过程做了很完整的封装。但是提供了非常多的扩展接口,供我们使用。这一节主要是实现spring提供的获取 beanFactory,classLoader 等属性的能力。 在我们开发过程中我们经常会使用到 ApplicationContextAware接口,来获取到 spring的上下文。来完成对bean的获取,当拿到了BeanFactory以后,我们能做的东西就多起来了,我们可以通过的spring工厂获取到我们需要的类,等等。

设计&实现

spring 提供Aware接口机制,给外部的类提供获取spring内部信息的能力。目前spring常用的Aware接口有

Aware 感知接口

Aware接口,只做标记。类似于Serializable序列化接口,仅标记这个类可以序列化。Aware 仅表示实现类具有在获取springbean创建过程中的一些内部属性的能力。


public interface Aware {
}

提供具体能力的接口

ApplicationContextAware 提供获取 applicationContext 的能力

public interface ApplicationContextAware extends Aware {
    void setApplicationContext(ApplicationContext applicationContext);
}

BeanClassLoaderAware提供获取 classLoader 的能力

public interface BeanClassLoaderAware extends Aware{
    void setBeanClassLoader(ClassLoader classLoader);
}

BeanFactoryAware 提供获取 BeanFactory 的能力

public interface BeanFactoryAware extends Aware{
    void setBeanFactory(BeanFactory beanFactory) throws BeansException;
}

BeanNameAware 提供获取 beanName 的能力

public interface BeanNameAware extends Aware{
    void setBeanName(String beanName);
}

他们都在创建bean完成后,在添加bean的扩展属性时,给这个bean加上特定的能力

@Override
    protected Object createBean(String beanName, BeanDefinition beanDefinition, Object[] args) {
        Object bean = null;
        try {
            bean = createBeanInstance(beanDefinition, beanName, args);
            // 注入属性
            applyPropertyValues(beanName, bean, beanDefinition);
            // 提供给外部的扩展包装,执行 Bean 的初始化方法和 BeanPostProcessor 的前置和后置处理方法
            bean = initializeBean(beanName, bean, beanDefinition);
        } catch (Exception e) {
            throw new RuntimeException("bean create error!", e);
        }
        // 注册实现了 DisposableBean 接口的 Bean 对象
        reGISterDisposableBeanIfNecessary(beanName, bean, beanDefinition);
        registerSingleton(beanName, bean);
        return bean;
    }
private Object initializeBean(String beanName, Object bean, BeanDefinition beanDefinition) throws BeansException {
        if (bean instanceof Aware) {
            if (bean instanceof BeanFactoryAware) {
                ((BeanFactoryAware) bean).setBeanFactory(AbstractAutowireCapableBeanFactory.this);
            }
            if (bean instanceof ApplicationContextAware) {
                ((ApplicationContextAware) bean).setApplicationContext(this);
            }
            if (bean instanceof BeanClassLoaderAware) {
                ((BeanClassLoaderAware) bean).setBeanClassLoader(getClassLoader());
            }
            if (bean instanceof BeanNameAware) {
                ((BeanNameAware) bean).setBeanName(beanName);
            }
        }
		.....
	}

测试

实现 需要添加特定能力的 Aware接口,实现他们的方法

public class UserService implements InitializingBean, DisposableBean, ApplicationContextAware, BeanClassLoaderAware, BeanNameAware {
    private ApplicationContext applicationContext;
    private ClassLoader classLoader;
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        this.classLoader = classLoader;
    }
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }
}
@Test
    public void testContext1() throws BeansException {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring.xml");
        applicationContext.registerShutdownHook();
        UserService userService = (UserService) applicationContext.getBean("userService");
        System.out.println(userService.say());
        System.out.println(userService.getApplicationContext());
        System.out.println(userService.getClassLoader());
        System.out.println(userService.getBeanName());
    }

以上就是探究实现Aware接口的原理及使用的详细内容,更多关于Aware接口原理使用的资料请关注编程网其它相关文章!

--结束END--

本文标题: 探究实现Aware接口的原理及使用

本文链接: https://www.lsjlt.com/news/211854.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 探究实现Aware接口的原理及使用
    目录前言设计&实现Aware 感知接口提供具体能力的接口测试前言 spring 对bean的创建过程做了很完整的封装。但是提供了非常多的扩展接口,供我们使用。这一节主要是实现...
    99+
    2023-05-18
    Aware接口原理使用 Aware接口实现
  • Spring中Aware接口的实现原理是什么
    今天就跟大家聊聊有关Spring中Aware接口的实现原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。使用示例:@Component&nbs...
    99+
    2022-10-19
  • Spring的Aware接口实现及执行顺序详解
    目录一、实现了Aware的接口二、为什么要使用 Aware 接口三、Aware接口执行顺序一、实现了Aware的接口 Spring中有很多继承于aware中的接口,这些接口到底是做什...
    99+
    2022-12-26
    Spring Aware接口执行顺序 Spring Aware
  • 探究Python并发编程中接口优化的实现方法。
    Python并发编程是一种非常流行的编程技术,它可以在多个线程或进程中同时执行代码,从而提高程序的运行效率。然而,在实现Python并发编程时,我们需要注意接口的优化,这可以帮助我们提高程序的运行效率和可靠性。 一、Python并发编程中的...
    99+
    2023-05-26
  • 探究Python并发编程中使用接口优化的最佳实践。
    Python并发编程是一种以提高程序运行效率为目标的编程方式,因为它可以让程序同时处理多个任务。然而,并发编程也带来了一些问题,例如线程安全、死锁等。为了解决这些问题,我们可以使用接口优化并发编程。本文将介绍Python并发编程中使用接口优...
    99+
    2023-05-26
  • 探究静态定位测量原理的应用和实践
    静态定位测量原理的应用与实践探析摘要:静态定位是一种常用的测量技术,它通过收集目标物体的相对位置信息,实现对目标物体的定位。本文将讨论静态定位测量的原理,并结合实际案例进行深入分析。同时,本文还将给出具体的代码示例,以帮助读者更好地理解和应...
    99+
    2023-12-28
    静态定位 测量原理 应用与实践
  • C++深入探究二阶构造模式的原理与使用
    目录一、构造函数的回顾二、半成品对象三、二阶构造四、小结一、构造函数的回顾 关于构造函数 类的构造函数用于对象的初始化构造函数与类同名并且没有返回值构造函数在对象定义时自动被调用 问...
    99+
    2022-11-13
  • MyBatis接口的简单实现原理分析
    用过MyBatis3的人可能会觉得为什么MyBatis的Mapper接口没有实现类,但是可以直接用?那是因为MyBatis使用Java动态代理实现的接口。这里仅仅举个简单例子来说明原理,不是完全针对MyBatis的,这种思想我们也可以应用在...
    99+
    2023-05-31
    mybatis 接口 原理
  • 精通Java接口的使用与原理
    接口基础知识 为什么需要接口 需求:要求实现防盗门的功能,门有“开”和“关”的功能,锁有“上锁”和&ldquo...
    99+
    2022-11-13
  • setTimeout的实现原理及使用注意
    这篇文章主要讲解了“setTimeout的实现原理及使用注意”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“setTimeout的实现原理及使用注意”吧!se...
    99+
    2022-10-19
  • Java接口的使用与原理是什么
    这篇“Java接口的使用与原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java接口的使用与原理是什么”文章吧。何...
    99+
    2023-06-29
  • PHP调用API接口的方法及实现
    随着互联网、云计算和大数据时代的到来,越来越多的应用程序需要调用第三方的API接口来获取数据,实现数据互通和协同工作。PHP作为一种常用的服务器端语言,也可以通过调用API接口来实现不同系统的数据交互和整合。本文将介绍PHP调用API接口的...
    99+
    2023-10-10
    数据挖掘 网络爬虫 前端 服务器 git
  • Android应用中使用及实现系统“分享”接口实例
    为了应用的推广、传播,很多的应用中都有“分享”功能,一个按钮,点击后会出现短信、微博等等一切实现了分享功能的应用列表。这一篇文章主要介绍怎么调用分享功能和怎么实现分享接口让自己...
    99+
    2022-06-06
    系统 接口 Android
  • ADO.NET连接池的原理及其使用方法
    本篇内容主要讲解“ADO.NET连接池的原理及其使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ADO.NET连接池的原理及其使用方法”吧!不要关闭数据库中所有的连接,至少保证ADO.NE...
    99+
    2023-06-17
  • Java中JDBC连接池的基本原理及实现方式
    目录一、 应用程序直接建立数据库连接模型二、使用数据库连接池优化模型1、关于连接池中的连接数量的一些规定:2、编写数据库连接池创建数据库连接池:进一步封装一些相关数据库的类的方法三、...
    99+
    2022-11-12
  • 详解C++ OpenCV实现图像拼接的原理及方法
    目录前言一、图像拼接相关原理 图像特征采集特征提取算法透视变换透视矩阵图像拷贝二、案例实现Step1:导入目标图片Step2:特征点提取和匹配 Step3:图像配...
    99+
    2022-11-13
  • LRUCache的实现原理及利用python实现的方法
    简介 LRU(Least Recently Used)最近最少使用,最近有时间和空间最近的歧义,所以我更喜欢叫它近期最少使用算法。它的核心思想是,如果一个数据被访问过,我们有理由相信它在将来被访问的概率就越...
    99+
    2022-06-04
    原理 方法 LRUCache
  • 微信域名防封API接口实现原理的示例分析
    这篇文章给大家分享的是有关微信域名防封API接口实现原理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。微信域名防封是指通过技术手段来实现预防措施。比如打赏防封、qp,H5推广、BC、小说防封等,封杀的频...
    99+
    2023-06-05
  • 使用Swagger实现接口版本号管理方式
    目录Swagger实现接口版本号管理使用swagger测试接口Swagger实现接口版本号管理 前言:使用swagger暴露对外接口时原则是每个系统在不同的迭代版本仅仅需要暴露该迭代...
    99+
    2022-11-12
  • 使用python3.0 对接美团接口的实现示例
    目录前言一、请求接口的基本系统参数解析二、具体参数的代码实现总结提示:嗨咯,大家好,今天又来更新了  本章要和大家分享的是关于美团接口的实现方式以及部分代码的展示。 前言 ...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作