在非spring容器环境中获取bean

在非Spring环境中管理和使用Bean的SpringUtils工具 以下是SpringUtils.java中一些核心方法的介绍及它们的应用::根据Bean的名称获取其实例,如果找不到则返回null。:根据Bean的类型获取其实例,如果找到多个同类型Bean则抛出异常。:检查指定名称的Bean是否存在。:判断指定名称的Bean是否是单例。:初始化指定的Bean。为了确保线程安全,这些方法在内部可能会使用到如等线程安全的数据结构和类。 阅读详情

1.spring工具类

package com.demo.utils;

import org.springframework.aop.framework.AopContext;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Component;
import java.lang.annotation.Annotation;
import java.util.Map;

/**
 * spring工具类 方便在非spring管理环境中获取bean
 */
@Component
public final class SpringUtils implements BeanFactoryPostProcessor
{
    /** Spring应用上下文环境 */
    private static ConfigurableListableBeanFactory beanFactory;

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException
    {
        SpringUtils.beanFactory = beanFactory;
    }

    /**
     * 获取对象
     *
     * @param name
     * @return Object 一个以所给名字注册的bean的实例
     * @throws BeansException
     *
     */
    @SuppressWarnings("unchecked")
    public static <T> T getBean(String name) throws BeansException
    {
        return (T) beanFactory.getBean(name);
    }

    /**
     * 获取类型为requiredType的对象
     *
     * @param clz
     * @return
     * @throws BeansException
     *
     */
    public static <T> T getBean(Class<T> clz) throws BeansException
    {
        T result = (T) beanFactory.getBean(clz);
        return result;
    }

    /**
     * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
     *
     * @param name
     * @return boolean
     */
    public static boolean containsBean(String name)
    {
        return beanFactory.containsBean(name);
    }

    /**
     * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
     *
     * @param name
     * @return boolean
     * @throws NoSuchBeanDefinitionException
     *
     */
    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException
    {
        return beanFactory.isSingleton(name);
    }

    /**
     * @param name
     * @return Class 注册对象的类型
     * @throws NoSuchBeanDefinitionException
     *
     */
    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException
    {
        return beanFactory.getType(name);
    }

    /**
     * 如果给定的bean名字在bean定义中有别名,则返回这些别名
     *
     * @param name
     * @return
     * @throws NoSuchBeanDefinitionException
     *
     */
    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException
    {
        return beanFactory.getAliases(name);
    }

    /**
     * 获取aop代理对象
     *
     * @param invoker
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T getAopProxy(T invoker)
    {
        return (T) AopContext.currentProxy();
    }

    /**
     * 根据注解类型获取bean
     *
     * @param clz 注解类型
     * @return bean集合
     */
    public static Map<String, Object> getBeansByAnnotation(Class<? extends Annotation> clz) {
        return beanFactory.getBeansWithAnnotation(clz);
    }
}

Spring在代码中获取bean的方法小结 在工作中有时候我们需要在非spring依赖注入或管理的类中获取service、dao等bean对象,这时候用@Autowired和@Resource显然是不行的,那么下面这篇文章就给大家了整理几种获取bean的方式,对大家的学习和工作具有一定的参考借鉴,下面来一起看看吧。 立即下载

相关推荐

PowerBI参数化实战:3分钟搞定动态数据源切换(附常见错误排查)

本文详细介绍了PowerBI参数化实战技巧,教你3分钟实现动态数据源切换。通过创建参数、改造查询和测试切换三步,轻松应对多环境部署与团队协作中的路径问题,并附上常见错误排查指南,有效提升报表的可维护性和工作效率。

p1q2r的博客 585

如何在非Spring容器管理的类中获取Spring容器中的Bean

按照Spring的默认规则,只要受Spring容器管理的类(添加了@Component、@Service等注解的类),才能获取Spring中的容器中的Bean(目标类的全局单实例)但在某些场景下,我们希望只是在某些业务类中的对象中暂时获取Spring中的容器中的Bean,当完成业务后,垃圾回收器会自动回收到该对象,毕竟业务类的对象只是暂时使用,没有让它一直存在的必要。

MengMengDeXiaoJi的博客 1344

DDR5内存ODT模式全解析:5种状态与实战配置指南(附时序图)

本文深入解析DDR5内存的片上终端电阻(ODT)机制,详细阐述了其五种核心状态(终结电阻禁用、RTT_WR、RTT_NOM_RD、RTT_NOM_WR、RTT_PARK)的定义、切换时序与工作原理。通过解读JESD79-5规范中的时序图,并提供基于模式寄存器的实战配置指南与代码示例,帮助硬件工程师和系统开发者优化信号完整性,解决高负载下的稳定性问题,并实现性能与功耗的最佳平衡。

weixin_29221753的博客 563

如何在非Spring容器管理的类中注入/获取 Spring容器中的 Bean?

只要是被称之为Bean的类就是被Spring容器管理的类。将Bean交给Spring容器管理的几种方式。

Jan's的博客 2771

SAP采购订单中项目类别B(限制)的控制逻辑

在笔者所在企业中,框架类采购订单中项目类别需要选择B(限制)。今天笔者从比较全面的角度分析了一下这个项目类别B到底可以决定些什么?控制到什么?先从后台SPRO中打开相应的配置菜单。 打开项目类别B之后,可以看到一些配置信息,这里有一点与其它配置不同的地方,即无法新增项目,也无法修改现有项目。这个疑惑今后再去解决吧。当前只研究项目类别B的控制逻辑。 下面就参考上图中的配置分段来分析和测试其控制逻辑, 1、如项目类别配置图,所需材料值为不允许;经测试,如下图在采购订单创建时,不能输入物料编号条目。

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 6033

POWER SI仿真流程

一、打开软件Power SI二、加载PCB,可以直接使用brd文件,不用再进行格式转换三、check Stackup,与原来的PCB叠层对照一遍,检查数据加载后有没有出错。四、select Nets,加载brd文件后,可能所有的网络都处于使用状态,先在右侧net manager下面右键disable all nets,再使能需要仿真的电源网络(如果要仿真的网络没有归属到电源网络,在其上右键,选classfy as power \ground nets)

lx5213的博客 1321

在非spring管理的类中获取spring容器中的 bean

实现ApplicationContextAware接口,重写setApplicationContext方法: @Service public class SpringContextHolder implements ApplicationContextAware { private static ApplicationContext applicationContext; /** * 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.

weixin_38860401的博客 1641

大厂面经:大疆嵌入式面试题及参考答案(4万字长文:持续更新)

目录 Linux 系统调用的过程,中间发生了什么? 表格总结 Linux 中断流程,谈谈你对中断上下文的理解 中断流程 中断上下文理解 Linuxschedule()函数的原理和调用的时机 schedule()函数原理 调用时机 页表实现机制,分页的缺点? 页表机制 分页的缺点 介绍操作系统的多级反馈调度策略,时间片轮转,在项目中如何指定优先级来调度进程完成快速响应(nice命令) 多级反馈队列调度 时间片轮转 使用nice命令 聊内存分配,进程内存分配,段页式存

大模型大数据攻城狮的专栏 4170

在非Spring 容器管理的类中,获取spring容器中的 bean

第一种方式 写一个工具类,实现ApplicationContextAware接口,从spring容器中获取 ① 写一个工具类 package com.june.utils; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; impo

法国锄头雨 3498

番外篇 | 关于YOLO11算法的改进点总结

关于YOLO11算法的改进点总结。🌈

小哥谈 2311

【WRF安装第三期(Ubuntu)】搭建WRF编译所需系统-第三方依赖库安装

WRF安装第三期:搭建WRF编译所需系统-第三方依赖库安装

WW、forever的博客 3138

好玩Spring之非spring环境获取Spring容器中的bean

现在,我们有个需求,如何在一个普通的pojo中,调用spring bean的方法,比如以下例子。 通过BeanFactoryPostProcessor获取bean,进而实现在普通类中调用bean的方法。

yuan882696yan的专栏 222

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

在非spring容器环境中获取容器里的Bean实例

SpringBean。

Double_dddddddd的博客 436

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

spring工具类 方便在非spring管理环境中获取bean

前言: 平常我们开发中,从spring ico容器中获取对象 @Autowired private TokenService tokenService; @Resource private TokenService tokenService; 那么,有还有什么办法从容器获取对象呢? ApplicationContextAware 接口 实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就

weixin_38982591的博客 1103

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

解决在非spring上下文的环境中无法获取Spring容器的bean【nullpointer:connot invoke because xxx is null问题】

1.背景: 项目在nio监听端口的事件中需要在接收到客户端数据以后把数据封装然后调用service层间接访问数据库插入数据,调试了一天,明明用了autowired但是仍然显示该service对象为空,一下是报错的代码: 2.原代码: @Component public class Myselect implements Callable { @Autowired private WashService washService; public void getSelector()

qq_41358574的博客 2681

获取spring bean的utils

package com.record.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import ja

皮皮猪的专栏 1059

【Spring】非Spring IOC容器下获取Spring IOC上下文的环境

前言 在Spring Web项目中,有些特殊的时候需要在非Spring IOC容器下获取Spring IOC容器的上下文环境,比如获取某个bean。 版本说明 声明POM文件,指定需引入的JAR。 <properties> <spring.version>4.0.9.RELEASE</spring.version> </p...

dongjizheng9270的博客 236

Java从Spring容器中获取的各种对象和各注入其中的bean实例

一,获取普通用户开发类型的Bean,例如Service,Dao等 一般Spring项目中在项目运行起来时都把各个想要的bean实例注入到Spring的IOC容器中,但是有些时候我们想在Spring之外的地方,例如在Filter,Intercept等地方想获取并使用Spring容器中的某些功能bean,尤其是service类型的bean,可以使用Spring提供的一下方法,步骤如下:1,首先得到对应...

shenzhenNBA的专栏 1810

Web容器中获取spring容器的bean对象

1.实现ApplicationContextAware接口 public class SpringContextUtil implements ApplicationContextAware { // Spring应用上下文环境 private static ApplicationContext applicationContext; /** * 实现ApplicationCont

Howie_zhw的博客 1315

springboot — 非Spring环境获取Spring的Bean

文章目录springboot —— 非Spring环境获取Spring的Bean springboot —— 非Spring环境获取Spring的Bean 代码如下: package org.jeecg.common.util; import javax.servlet.http.HttpServletRequest; import org.jeecg.common.constant.ServiceNameConstants; import org.springframework.beans.Beans

pentiumCM的博客 776

Spring获取Bean工具类

在非业务中获取Spring容器中的Bean对象,可以使用如下工具 import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; imp...

huangbaokang的博客 628

Spring获取bean对象

SpringUtils、在非Spring管理环境中获取Bean对象、使用Spring工具获取Bean对象

qq_51076413的博客 1484

Spring:在非Spring Ioc管理的类中,使用@Autowired自动注入Ioc中的Bean对象时,报空指针。

我们一般在使用@Autowired时,都是在Spring Ioc容器管理的Bean中,有时我们需要在非Ioc管理的类中使用Ioc管理的Bean。通过@Autowired自动注入会报空指针错误的异常。之前遇到这个问题在网上找了很久,找到一个方法,但测试后发现还是有问题,也可能是我自己写的有问题。 今天介绍一种极简单的方式: 获取当前Ioc容器,直接从Ioc容器中获取Bean。 第一步: We...

DynamicSea 3433
上一篇: 雪花算法(SnowflakeIdWorker)生成分布式唯一id
下一篇: springboot整合neo4j模糊查询
broccoli2
博客等级 码龄10年 404粉丝 195原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值