代码编织梦想

在不是Spring管理的类中注入Bean的方法

传统的注入Bean的方式有很多,例如:
注解注入像:@Autowired、@Resource
构造器注入set注入静态工厂的方法注入动态工厂的方式注入
本文重点不在讲解传统注入方式,因此不再赘述,有需要的小伙伴自己百度即可,一看就懂。

重点来了:⬇️⬇️

在SpringBoot项目开发过程中,并不是说在每一个地方都能将Bean注入到我们想要的地方去的,例如在Utils使用到dao、new的类中使用Service…我们就不能直接注入了,这个时候就是我们需要封装springContext的时候了,而ApplicationContextAware就起了关键性的作用

实际使用案例:

  1. 创建上下文获取Bean帮助类
/**
* @author xin.huang
* Date  2022/2/10
* Desc 根据Bean名称或Class获取Bean
*/
@Component
public class ApplicationContextGetBeanHelper implements ApplicationContextAware {
   private static ApplicationContext applicationContext;

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

   public static Object getBean(String className) throws BeansException,IllegalArgumentException {
       if(className==null || className.length()<=0) {
           throw new IllegalArgumentException("className为空");
       }

       String beanName;
       if(className.length() > 1) {
           beanName = className.substring(0, 1).toLowerCase() + className.substring(1);
       } else {
           beanName = className.toLowerCase();
       }
       return applicationContext != null ? applicationContext.getBean(beanName) : null;
   }

   public static  <T> T getBean(Class<T> beanClass) throws BeansException,IllegalArgumentException {
       if(beanClass==null) {
           throw new IllegalArgumentException("beanClass为空");
       }
       return applicationContext != null ? applicationContext.getBean(beanClass) : null;
   }

}
  1. 在需要注入Bean的地方使用ApplicationContextGetBeanHelper去getBean即可
// 方式一:根据要注入的Bean的Class去获取Bean
    TableMetaService tableMetaService1 = ApplicationContextGetBeanHelper.getBean(TableMetaService.class);
    
// 方式二:根据要注入的Bean的name去获取Bean
    TableMetaService tableMetaService2 = (TableMetaService)ApplicationContextGetBeanHelper.getBean("tableMetaService");

就是这么简单,可以在不是Spring管理的类中使用,也可以在new的类中去使用均可获取到想要的Bean对象。

如有其他疑问,请评论区留言或邮箱联系 activehx@163.com

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44924358/article/details/122863381

web项目中获取springbean——在非spring组件中获取springbean-爱代码爱编程

最近在做项目的时候我发现一个问题:Spring的IOC容器不能在Web中被引用(或者说不能被任意地引用)。 我们在配置文件中让Spring自 动装配,但并没有留住ApplicationContext的实例。 我们如果希望在我们的项目中任何位置都能拿到同一个 ApplicationContext来获取IOC容器中的资源,就要让Spring将上下文环境填充到我

非service类注入bean的一个通解(针对不容易注入bean的时候)_琅琊山二当家的博客-爱代码爱编程

 线程任务类bean注入的问题(不容易注入bean的问题通解)      有些类不是标准的service类,注入bean会有问题  加上compoent注解依然不行,  比如对于线程任务类,注入一些service时候有时候会报bean不能创建  比如刚才我使用的封装的一个memcache的一个class  如下图会报错    想了一个办法,注入不进去

使用spring注解,在静态方法中注入bean(spring静态注入组件——工具类常用)_smartcoderz的博客-爱代码爱编程

如果直接用spring注入静态属性,则会报错,提示@Resource annotation is not supported on static fields,如果又一定要通过spring注入bean,可以采用@PostConstruct注解在某个用来初始化的方法上,注入时注入到另一个不是静态的变量里,然后在初始化方法里面将注入好的变量赋值给静态变量,通过

spring:在非spring ioc管理的类中,使用@autowired自动注入ioc中的bean对象时,报空指针。_起啥名都已存在的博客-爱代码爱编程

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

在普通类中注入(获取)spring管理的bean实例的contextutil工具类_浮云丿的博客-爱代码爱编程

开发过程中,有时会遇到需要在普通类中注入spring管理的单例bean。直接注入是注入不进去的,如图: 此时就可以使用下面的工具类来获取bean实例,如图: 附上ContextUtil代码: package com.qiang.Util; import org.springframework.beans.BeansException; im

spring抽象类中注入bean_想跑步丶小胖子的博客-爱代码爱编程_spring 抽象类实现接口

在使用spring的时候,有时由于设计的需要,需要使用抽象类(比如模板方法模式),但在抽象类中实现方法是需要依赖其他的接口或类的方法,这时就需要对依赖的接口或类进行注入,需要注意以下内容: 在抽象类中需要注入(@autowire),在继承了该抽象类的子类中同样需要再次注入。比如当前项目中,用户购买物品的模板抽象类中需要使用userservice,则在改抽

spring boot 项目中让非spring管理的类获得一个注入的bean_huangyaa729的博客-爱代码爱编程

由于业务需要,项目中集成了mqtt服务,在mqtt连接中需要设置个回调类,这个回调类定义为一个普通类,不通过Spring管理,但是在回调类中又需要引入数据库的操作,采用通过注解引入的数据库框架类服务,显然不能通过简单的new

在不受spring管理的类中注入spring 管理的对象_fickle_actor的博客-爱代码爱编程

前几天在做一个任务时,需要在一个普通的java类(不受Spring管理的类)中,调用 spring data jpa的某个xxxReponsitory 接口,同时需要读取properties 文件中的属性值,试了很多方法拿到

spring中bean的注入方式_张维鹏的博客-爱代码爱编程_bean注入

平常的Java开发中,程序员在某个类中需要依赖其它类的方法。 通常是new一个依赖类的实例再调用该实例的方法,这种开发存在的问题是new的类实例不好统一管理。  Spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过Spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。  依赖注入的另一种说法是”控制反转”。通俗的理解是:

spring在静态类中注入bean的的解释__miccretti的博客-爱代码爱编程

2019独角兽企业重金招聘Python工程师标准>>> @Component public class ModelMapper { @AutoWired private static AssignmentManager assignmentManager; public static void add()

spring基于xml注入bean的几种方式_姓刘的人运气不会太差的博客-爱代码爱编程_spring基于xml注入bean的几种方式

spring中的依赖注入 依赖注入: Dependency Injection IOC的作用: 降低程序间的耦合(依赖关系) 依赖关系的管理: 以后都交给spring来维护,在当前类需要用到其他类的对象,由spring为

Spring在抽象类中注入bean-爱代码爱编程

前言 在进行支付宝回调业务开发时,使用到了抽象类。把回调之后的业务处理如增加余额等公共的逻辑写在父类中。至于业务处理之前的验签工作依据子类对象配置的不同交由子类自己实现。 public abstract class AliPayCallBackService{ public abstract boolean rsaCheck(); pub

如何在静态方法或非Spring Bean中注入Spring Bean-爱代码爱编程

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>        在项目中有时需要根据需要在自己new一个对象,或者在某些util方法或属性中获取Spring Bean对象,从而完成某些工作,但是由于自己new的对象和util方法并不是受Spring所管理的,如果直接在所依赖的属性上使用@Autowir

Spring中的依赖注入与Bean的配置-爱代码爱编程

目录 前言如何配置一个Bean如何获取Bean属性注入构造方法注入属性注入细节处理特殊字符引入其他Bean注入集合类型Properties注入自动装配Spring Bean的常用配置及属性实例化Bean的三种方法构造器实例化静态工厂方式实例化实例工厂方式实例化Spring Bean的作用域作用域的种类singleton作用域prototype作用域

【开发心得】非SpringBean管理的类使用Bean注入的解决方案。-爱代码爱编程

前言: 这种场景还是比较多的,比如Quartz定时器框架,比如我们自己编写的一些工具类还想对数据库操作等。 解决方案,通过手动实现ApplicationContextAware,从applicationContext中获取bean即可。   @Component public class SpringUtils implements Appli

java 抽象类 注入_如何在抽象类中注入bean-爱代码爱编程

抽象类是无法实例化的,因此无法使用@Service等这种注解直接将抽象类交给ioc容器管理,但是项目中往往需要有很多子类公用抽象父类的模板方法,那么怎么实现呢? 错误演示 1、抽象类 @Componentpublic abstract classBaseService { @Autowired Dao dao; } 2、子类 @Comp

在非spring管理的类中获取spring容器中的 bean-爱代码爱编程

实现ApplicationContextAware接口,重写setApplicationContext方法: @Service public class SpringContextHolder implements ApplicationContextAware { private static ApplicationContext applica