Spring的Aware接口讲解,内含几篇参考文章

news2024/11/16 22:49:06

Aware接口文章

  • 一、使用Aware与不使用Aware的效果
  • 二、ApplicationContext实例介绍Aware
  • 三、从Aware顶级接口实现自己的XXXAware

一、使用Aware与不使用Aware的效果

参考文章:Spring中的aware接口

  1. 定义BeanNameAware接口
public interface BeanNameAware extends Aware {
      void setBeanName(String name);
}
  1. 定义两个User,一个实现BeanNameAware,一个不实现BeanNameAware
public class User implements BeanNameAware{

    private String id;

    private String name;

    private String address;

    public void setBeanName(String beanName) {
        //ID保存BeanName的值
        id=beanName;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
public class User2 {

    private String id;

    private String name;

    private String address;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
  1. 在Spring配置文件中初始化两个对象
 <bean id="zhangsan"  class="com.github.jettyrun.springinterface.demo.aware.beannameaware.User">
        <property name="name" value="zhangsan"></property>
        <property name="address" value="火星"></property>
    </bean>

    <bean id="lisi"  class="com.github.jettyrun.springinterface.demo.aware.beannameaware.User2">
        <property name="name" value="lisi"></property>
        <property name="address" value="火星"></property>
    </bean>
  1. main方法测试
 public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application-beanaware.xml");

        User user=context.getBean(User.class);
        System.out.println(String.format("实现了BeanNameAware接口的信息BeanId=%s,所有信息=%s",user.getId(),user.toString()));

        User2 user2=context.getBean(User2.class);
        System.out.println(String.format("未实现BeanNameAware接口的信息BeanId=%s,所有信息=%s",user2.getId(),user2.toString()));
    }
  1. 运行结果
实现了BeanNameAware接口的信息BeanId=zhangsan,所有信息=User{id='zhangsan', name='zhangsan', address='火星'}
未实现BeanNameAware接口的信息BeanId=null,所有信息=User{id='null', name='lisi', address='火星'}
  1. 分析结果
  • 能够看到,我们在实现了BeanNameAware的 User中,获取到了Spring容器中的BeanId(对应spring配置文件中的id属性),而没有实现BeanNameAware的User2,则不能获取到Spring容器中的Id属性。
  • 所以BeanNameAware接口是为了让自身Bean能够感知到,获取到自身在Spring容器中的id属性。
  • 同理,其他的Aware接口也是为了能够感知到自身的一些属性。
    比如实现了ApplicationContextAware接口的类,能够获取到ApplicationContext,实现了BeanFactoryAware接口的类,能够获取到BeanFactory对象。

二、ApplicationContext实例介绍Aware

参考文章:Spring的Aware接口原来是这么回事

  1. 想要使用ApplicationContext对象,就要实现ApplicationContextAware接口
public class MyApplicationContextAware implements ApplicationContextAware {
    // 用一个全局变量,保存接口回调时传入的applicationContext对象
    private ApplicationContext applicationContext;

	// 使用获取的applicationContext对象,查看容器中有哪些bean.
    public void printAllBean(){
        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
        System.out.println("当前容器中的bean如下:");
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
    }
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}
  1. 把MyApplicationContextAware这个bean注册到容器中
<bean id="myApplicationContextAware" 
class="com.kaka.spring.context.aware.MyApplicationContextAware"/>
  1. 执行代码
    @Test
    public void awareTest(){
        ClassPathXmlApplicationContext classPathXmlApplicationContext = 
        			new ClassPathXmlApplicationContext("applicationContext.xml");
        MyApplicationContextAware myApplicationContextAware = 
        			classPathXmlApplicationContext.getBean("myApplicationContextAware",MyApplicationContextAware.class);
        myApplicationContextAware.printAllBean();
    }
  1. 运行结果
    在这里插入图片描述

三、从Aware顶级接口实现自己的XXXAware

参考视频:Aware依赖注入管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/174900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

树的应用举例——并查集和树状数组

并查集 并查集是利用森林来描述一些不相交的集合&#xff0c;并支持集合的合并操作和查询操作。 假设有n个元素&#xff0c;分为m个不相交集合&#xff0c;一个集合构成一棵树&#xff0c;同一棵树&#xff08;集合&#xff09;中的元素地位相等。例如下图的森林表示一个包含…

【Python】Numpy多项式详解

文章目录多项式简介构造函数与图像运算符重载常用方法多项式简介 Numpy.polynomial中封装了六种多项式类&#xff0c;除了常规的多项式a0a1x⋯anxna_0a_1x\cdotsa_nx^na0​a1​x⋯an​xn之外&#xff0c;还有五种在数学、物理中常用的正交多项式&#xff0c;例如Hermite多项式…

祝贺!2022 Rust中文社区线上Hackathon评审结果出炉!

完全超出预期&#xff08;的优秀&#xff01;&#xff09;&#xff01;这次黑客松共有9支队伍闯入最后的评审会。他们是&#xff1a;233bithttps://github.com/rustcc/hackathon2022/tree/master/233bitRust 实现的 合成材料计算器EvolutionLabhttps://github.com/rustcc/hacka…

来自AI浩的新年祝福

大家好&#xff0c;感谢大家这一年来的关注和支持&#xff0c;在新春即将到来之际&#xff0c;AI浩祝大家&#xff1a; 祝大家新的一年里生活能够像下面的兔子那样&#xff0c;多彩多姿&#xff01; 祝愿大家&#xff0c;快乐常伴&#xff0c;笑口常开&#xff01; 在新的…

chfs安装使用注意事项及如何实现http外网访问

对于分享电脑上的文件&#xff0c;或与手机互传文件&#xff0c;除了 QQ、微信还有很多专业的工具&#xff0c;Cute Http File Server (缩写为 chfs)&#xff0c;就是一个免费小巧的 HTTP 文件共享服务器工具&#xff0c;它可以跨平台支持 Windows、Mac 和 Linux&#xff0c;只…

37岁被裁,但毫无遗憾:小镇出身,一穷二白,完整吃过互联网+房地产红利,现在上海有千万房产!...

有人被裁是失业&#xff0c;有人被裁是退休&#xff0c;有时候人类的悲欢真的不相通&#xff0c;来看看这位网友的故事&#xff1a;37岁&#xff0c;年底被裁&#xff0c;但是不留遗憾了。算是完整吃过一波互联网房地产红利&#xff0c;小镇出身&#xff0c;一穷二白&#xff0…

蚂蚁整改,暗藏深意

‍数据智能产业创新服务媒体——聚焦数智 改变商业互联网金融可以提升金融服务的效率和质量&#xff0c;促进传统产业转型升级&#xff0c;是资本竞相追逐的丛林&#xff0c;也是互联网巨头间相互争抢的战略高地。通过上市公司分拆子公司进行上市&#xff0c;可以获得一系列好…

C语言结构体 笔记

C语言提供结构体来管理不同类型的数据组合。C语言中的结构体类似于Java中的类。声明结构体类型定义变量名定义变量名和初始化结构体对齐结构体的大小必须是其最大成员的整数倍!&#xff08;1&#xff09;例如&#xff0c;此结构体的大小为16。因为double类型占8个字节&#xff…

聊一聊用户增长

#01 什么是用户增长 用户增长基本上会涉及生意场上的各行各业&#xff0c;你开个店面希望有更多的客户光顾&#xff0c;你做了个APP希望有更多的用户经常使用&#xff0c;你搭建了个电商平台希望有更多的人下单买东西。 用户增长&#xff0c;即以提升用户LTV为目的&#xff08…

MongoDB学习笔记【part1】概念与安装

一、NoSQL简介 NoSQL Not Only SQL&#xff0c;不仅仅是SQL&#xff0c;泛指非关系型数据库。NoSQL 不依赖业务逻辑方式存储&#xff0c;而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。 特点&#xff1a;不遵循SQL标准、不支持ACID&#xff08;原子、一致…

Linux常用命令——sysctl命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) sysctl 时动态地修改内核的运行参数 补充说明 sysctl命令被用于在内核运行时动态地修改内核的运行参数&#xff0c;可用的内核参数在目录/proc/sys中。它包含一些TCP/ip堆栈和虚拟内存系统的高级选项&#xff…

FANUC机器人INTP-250或251用户坐标系或工具坐标系与示教资料不符报警的处理办法

FANUC机器人INTP-250或251用户坐标系或工具坐标系与示教资料不符报警的处理办法 在机器人的日常使用过程中,有可能会碰到这样的情况: 点位的示教是在工具坐标系1、用户坐标系0下示教的,如下图所示, 但是使用过程中可能被自己或别人不小心修改成了工具坐标系2、用户坐标系…

HTML学习02

表格标签的学习 表格 table 行 tr列 td表头列 thtable中有如下属性 border&#xff1a;表格边框的粗细width:表格的宽度cellspacing&#xff1a;单元格间距cellpadding&#xff1a;单元格填充. tr中有一个属性&#xff1a; align -> center , left , right …

数和森林(快来瞧)

森林的定义 森林是由多颗互不相交的树所构成的树的集合&#xff0c;即森林包含多棵树&#xff0c;每一棵树都有自己的根结点。一棵树也可以看成森林。 树的表示及基本操作 1.树&#xff08;一般树&#xff09;的表示方法 1.1树的双亲表示法 树的双亲表示法是将树的各个节点…

《牛客网刷题之零基础入门前端之CSS》

目录 CSS 选择器 FED9 CSS选择器——标签、类、ID选择器 FED10 CSS选择器——伪类选择器 FED11 CSS选择器——伪元素 样式设置 FED12 按要求写一个圆 FED13 设置盒子宽高 FED74 段落标识 FED75 设置文字颜色 FED76 圣诞树 布局 FED14 浮动和清除浮动 FED15 固定定…

LeetCode刷题模版:162、164-166、168

目录 简介162. 寻找峰值164. 最大间距【考查排序】165. 比较版本号166. 分数到小数168. Excel表列名称结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后…

【GlobalMapper精品教程】041:从多波段影像中提取单波段方法

本实验讲解globalmapper中文24软件从多波段遥感影像中提取单波段方法。 参考阅读:【Envi风暴】Envi插件大全:多波段拆分工具的巧妙使用 文章目录 一、多波段影像介绍二、单波段提取方法一、多波段影像介绍 加载实验数据:打开GM软件,加载专栏配套实验数据包中的data041.rar…

第二章 IOC

1.IOC底层原理*什么是IOC&#xff1a;控制反转&#xff0c;把对象创建和对象之间的调用过程交给Spring进行管理*使用IOC的目的&#xff1a;降低耦合度*IOC底层原理&#xff1a;xml解析工厂模式反射*IOC思想基于IOC容器完成&#xff0c;IOC容器底层就是对象工厂*Spring提供IOC容…

【网络安全】WiFi密码爆破教程

WiFi密码爆破教程前言一、什么是暴力破解&#xff1f;二、准备破解工具1.VMware Pro 16 虚拟机安装2. VMware安装Kali Linux3. kali监听无限网卡三、WiFi密码暴力破解1. 虚拟机连接USB网卡2. 扫描附近WiFi3. 查看目标WiFi连接设备4. 抓包5. 破解前言 暴力破解攻击是指攻击者通…

代码随想录算法训练营第15天 102. 二叉树的层序遍历、226. 翻转二叉树

代码随想录算法训练营第15天| 102. 二叉树的层序遍历、226. 翻转二叉树 二叉树的层序遍历 学会二叉树的层序遍历&#xff0c;可以一口气打完以下十题&#xff1a; 102.二叉树的层序遍历107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515…