代码编织梦想

前言:此文仅限新手入行,大佬回避。

我们在使用Spring开发程序的适合,Spring提供了很方便的对象管理方式,即IOC,而且也提供了非常友好边界的对象注入方式DI

只要是被Spring容器所管理的类,就可以使用@Resource或者@Autowired注解将其他被Spring容器管理的类注入进来。

image.png

什么是被Spring容器管理的类?

只要是被称之为Bean的类就是被Spring容器管理的类。

不了解的可以看看小简写的这一篇:

将Bean交给Spring容器管理的几种方式

在非Spring管理的类中怎么办?

有时候我们就是需要在非Spring管理的类中使用Bean怎么办呢?

“不可能的,很少见”

“一般碰不到的”

很多入职的新人可能会这样想,但是!我告诉你,很多情况都会要使用到这个。

比如我这一篇:

踩坑篇之WebSocket实现类中无法使用@Autowired注入对象

解决方法

我们定义一个上下文类,在SpringBean全部扫描完成后,我们去使用类去实现ApplicationContextAware接口,重写setApplicationContext方法,获取到ApplicationContext数据后,放到静态属性中。

package cn.donglifeng.shop.common.context;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;

/**
 * @author JanYork
 * @date 2023/3/8 9:33
 * @description SpringBean上下文
 */
@Component
public class SpringBeanContext implements ApplicationContextAware {

    private static ApplicationContext context;

    @Override
    public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException {
        context = applicationContext;
    }

    /**
     * 获取上下文
     *
     * @return 上下文对象
     */
    public static ApplicationContext getContext() {
        return context;
    }

    /**
     * 根据beanName获取bean
     *
     * @param beanName bean名称
     * @return bean对象
     */
    public Object getBean(String beanName) {
        return context.getBean(beanName);
    }

    /**
     * 根据beanName和类型获取bean
     *
     * @param beanName bean名称
     * @param clazz    bean类型
     * @param <T>      bean类型
     * @return bean对象
     */
    public <T> T getBean(String beanName, Class<T> clazz) {
        return context.getBean(beanName, clazz);
    }

    /**
     * 根据类型获取bean
     *
     * @param clazz bean类型
     * @param <T>   bean类型
     * @return bean对象
     */
    public <T> T getBean(Class<T> clazz) {
        return context.getBean(clazz);
    }
}

代码很简单,自行研究。

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

关于如何获取到spring容器中的bean类_swaggy_xu的博客-爱代码爱编程

关于这一点,网上有相当多的博客讲解。但是,我在使用的时候,还是遇到的不小的问题。 先说说背景。我在会议上的监听器中需要使用的服务层的方法。但是,我的服务层使用的是ioc。一开始,不管怎么新,都会报空值错误。仔细想了想,我是在tomcat容器中获取spring容器中的东西。不在同一个容器,应该不能直接新获得。 在网上,很多人推荐使用ApplicationCo

【springboot】在普通类中获取spring容器中的bean_may的博客的博客-爱代码爱编程

这段时间公司搞封闭开发,做一个联通总部的客服系统项目,是基于springboot的。在开发工程中遇到一个页面datagrid数据排序的功能,因为有多个表的数据都要用到排序功能,于是我就写了一个排序功能的公共实现类,方便大家使

spring中获取容器中的bean为什么前转成接口而不是实现类_遇见更优秀的自己的博客-爱代码爱编程

简单介绍一下上下文,userService是服务层接口有一个save方法,userServiceImpl是该接口的实现类重写了save方法。 applicationContext.xml如图: 后台代码如图: 问题是:在后台代码当中为什么取到bean后要强转成接口类型(UserService)而不是实现类类型(UserServiceImpl) 问题的起因是我们一

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

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

springboot普通类获取spring容器中bean的方法_最爱猫被窝的博客-爱代码爱编程

目录 前言创建springboot工程demo项目结构图示项目结构说明 工程代码servicetestutils启动类 测试效果 前言 在spring框架中,是无法在普通类中通过注解注入实例的,

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

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

解决无法注入spring容器,获取不到spring容器中的bean问题-爱代码爱编程

解决无法注入spring容器,获取不到spring容器中的bean问题 前两天工作中遇到一个问题,收到的需求是根据logbak日志实现通过过滤错误日志发送预警邮件到邮箱,logback自定义实现类如下 /** * @author KyleYao * @date 2020/4/21 13:01 * @description: 错误日志邮件发送 *

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

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

从Spring容器中获取bean-爱代码爱编程

一般情况下我们在代码中都是通过注解直接获取类对象,但是实际业务中偶尔也会出现无法注入的情况,这时可以从Spring容器中直接获取bean。具体实现如下: 1. 先创建获取bean的方法 @Component public class SpringUtil implements ApplicationContextAware { private

Spring容器中的Bean是否会被GC呢?-爱代码爱编程

Spring容器中的Bean是否会被GC呢?最近好几次被校招实习生问及,对于初学者来说,这应该是一个有意思的问题,鉴于此,笔者顺便写个这个文档。  1.Spring容器中Bean的作用域 当通过Spring容器创建一个Bean实例时,不仅可以完成Bean的实例化,还可以为Bean指定特定的作用域。Spring支持如下5种作用域: singl

spring boot获取spring容器中的bean对象-爱代码爱编程

我们知道如果我们要在一个类使用  spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用spring提供的其他对象或者说有一些不需要交给spring管理,但是需要用到spring里的一些对象。如果这是spring框架的独立应用程序,我们通过

spring容器中如何注入多个相同bean及@Primary注解使用-爱代码爱编程

@Primary注解使用 当一个方法有多个实现类时,在方法中注入了多个,@primary可以指定注入哪一个。 @Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常 @Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用 @Autowired

Spring中把一个bean对象交给Spring容器管理的三种方式-爱代码爱编程

一、使用@Component,把bean对象依赖交给Spring容器  注意,该注解不能使用,则说明未添加依赖,需要去该项目pom.xml文件内引入依赖,若该项目只是作为一个存放工具类的子模块项目,没有业务代码编写,则在引入的依赖下加上该配置<scope>provided</scope>表示该依赖只在编译阶段有效,否则不要加,

将Bean注入Spring容器的五种方式-爱代码爱编程

将bean放入Spring容器中有哪些方式? 我们知道平时在开发中使用Spring的时候,都是将对象交由Spring去管理,那么将一个对象加入到Spring容器中,有哪些方式呢,下面我就来总结一下 1、@Configuration + @Bean 这种方式其实也是我们最常用的一种方式,@Configuration用来声明一个配置类,然后使用 @B

在非Spring管理的类中注入Bean的方法-爱代码爱编程

在不是Spring管理的类中注入Bean的方法 传统的注入Bean的方式有很多,例如:注解注入像:@Autowired、@Resource构造器注入、set注入、静态工厂的方法注入、动态工厂的方式注入… 本文重点不在讲解传统注入方式,因此不再赘述,有需要的小伙伴自己百度即可,一看就懂。 重点来了:⬇️⬇️ 在SpringBoot项目开发过程中,