首页 > 其他分享 >SpringBoot获取Bean的工具类

SpringBoot获取Bean的工具类

时间:2023-10-12 17:36:07浏览次数:31  
标签:applicationContext SpringBoot getBean 获取 Bean Bean2 Bean1 SpringBeanUtil public

1、beanName

  • 默认是类名首字母小写
    下面的类:beanName = bean1
@Component
public class Bean1 {
    
    public String getBean1() {
        return "Bean1";
    }
}
  • 修改beanName
    下面的类:beanName = bean2New
@Component("bean2New")
public class Bean2 {
    
    public String getBean2() {
        return "Bean2";
    }
}

2、工具类

package com.cc.eed.utils;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;

/**
 * <p>获取spring的bean的工具类</p>
 *
 * @author CC
 * @since 2023/10/12
 */
@Component
public class SpringBeanUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringBeanUtil.applicationContext = applicationContext;
    }

    /** <p>根据类的clazz获取<p>
     * @param clazz clazz
     * @return {@link T}
     * @since 2023/10/12
     * @author CC
     **/
    public static <T> T getBean(Class<T> clazz) {
        T t = applicationContext != null ? applicationContext.getBean(clazz) : null;
        Assert.notNull(t, "当前Bean为空,请重新选择!");
        return t;
    }

    /** <p>根据Bean名字获取<p>
     * @param clazzName bean名字
     * @return {@link Object}
     * @since 2023/10/12
     * @author CC
     **/
    public static Object getBean(String clazzName) {
        return applicationContext.getBean(clazzName);
    }
}

3、使用

    @Test
    public void test01()throws Exception{
        //方式一:根据类的clazz获取
        Bean1 bean = SpringBeanUtil.getBean(Bean1.class);
        System.out.println(bean.getBean1());
        Bean2 bean2 = SpringBeanUtil.getBean(Bean2.class);
        System.out.println(bean2.getBean2());

        //方式二:根据bean名字获取
        Bean1 bean11 = (Bean1) SpringBeanUtil.getBean("bean1");
        System.out.println(bean11.getBean1());
        //报错:NoSuchBeanDefinitionException
        Bean2 bean22 = (Bean2) SpringBeanUtil.getBean("bean2");
        //正确
        Bean2 bean222 = (Bean2) SpringBeanUtil.getBean("bean2New");
        System.out.println(bean222.getBean2());
    }

标签:applicationContext,SpringBoot,getBean,获取,Bean,Bean2,Bean1,SpringBeanUtil,public
From: https://www.cnblogs.com/kakarotto-chen/p/17760069.html

相关文章

  • 内网环境中获取域控权限的常见方法
    内网协议NTLM-CVE-2019-1040利用1-exchange​通过printerbug使exchange机器向攻击机发送认证回连攻击者的机器,再使用ntlmrelayx--remove-mic参数绕过NTLMMIC校验,将smb中继到LDAP进行身份认证。​打印机的spoolsv.exe服务允许用户远程调用,当用户向RemoteFindFirstPrinterChan......
  • 数据库解决获取一个字段parent中某个字符串child第一次和第二次出现的位置之间的内容c
    下面就postgresql数据和oracle数据库分别提供两种解决方法--postgresql数据库解决获取一个字段parent中某个字符串child第一次和第二次出现的位置之间的内容cut--方法一selectcasewhenposition(childinparent)>0thensubstring(parent,position(childinparent)+l......
  • 获取打印机时候报错 RPC 服务不可用
    检查以下几个服务状态是否正常PrintSpoolerRemoteProcedureCall(RPC)RemoteProcedureCall(RPC)LocatorDCOMServerProcessLauncher......
  • 解决 springboot 2.6.6 版本中内嵌 tomcat 9.0.60 版本 严格执行RFC 3986规范,导致在 G
    项目中get请求:http://domain:port/api/module/function/getList?pageNum=1&pageSize=1000&keyWord=[]&id=;keyWord的参数应该是 keyWord="[]",如果不加双引号,keyWord就变成了数组,后台接口就报错了。调查原因:springboot2.6.6版本中内嵌tomcat9.0.60版本严格执行RFC3986规范......
  • getMonth():获取当前月(注意:返回数值为0~11,需要自己+1来显示),0代表一月份,如果要显示2位
    getMonth():获取当前月(注意:返回数值为0~11,需要自己+1来显示),0代表一月份,JavaScriptDate对象 日期选择控件的主要功能是向用户提供包含年、月、日的日期数据并并允许用户对其修改。如果要捕获用户修改日期选择控件的数据事件响应,需要为DataPicker添加一个OnDateChangedListene......
  • SpringBootCMS漏洞复现分析
    SpringBootCMS,极速开发,动态添加字段,自定义标签,动态创建数据库表并crud数据,数据库备份、还原,动态添加站点(多站点功能),一键生成模板代码,让您轻松打造自己的独立网站,同时也方便二次开发,让您快速搭建个性化独立网站,为您节约更多时间。http://www.jrecms.com环境搭建修改src/main/......
  • WiFi CSI获取方法以及CSI数据内容
    通过之前的介绍,我们知道了WiFiCSI提供比RSSI更多信息,通过这些信息,WiFiCSI能够做很多事情,那么WiFiCSI提供了哪些信息,如何通过这些信息实现某个应用呢?本文以ESP为例,先引入WiFiCSI内容,简单介绍CSI数据中都有哪些信息,后续再分析利用这些信息开发应用。1基本介绍1.1WiFiCSI简......
  • SpringBoot + SpringBatch + Quartz整合定时批量任务
    1、引言最近一周,被借调到其他部门,赶一个紧急需求,需求内容如下:PC网页触发一条设备升级记录(下图),后台要定时批量设备更新。这里定时要用到Quartz,批量数据处理要用到SpringBatch,二者结合,可以完成该需求。由于之前,没有用过SpringBatch,于是上网查了下资料,发现可参考的不是很多,于是只能去......
  • 忽视日志吃大亏,手把手教你玩转 SpringBoot 日志
    一、日志重要吗程序中的日志重要吗?在回答这个问题前,笔者先说个事例:❝笔者印象尤深的就是去年某个同事,收到了客户反馈的紧急bug。尽管申请到了日志文件,但因为很多关键步骤没有打印日志,导致排查进度很慢,数个小时都没能排查到问题,也无法给出解决对策。导致了客户程序一直阻断,最......
  • jmeter 提取一个或多个响应值保存到csv文件中,用beanshell实现脚本
    importorg.json.JSONObject;//写入文件//本地存储文件路径FileWriterfs=newFileWriter("D:/apache-jmeter-5.1.1/bin/token.csv",true);BufferedWriterout=newBufferedWriter(fs);//提取出来的token,并通过,换列out.write("${sessionStr}");out.write(",");ou......