Spring Boot获取spring bean的3种方式,你都了解吗?

@PostConstruct注解详细分析,结合案例和使用场景(保姆级教程) juc、java 阅读详情

在使用spring框架中我们都知道,某个类如果使用了@Service、@Autowire 这种依赖注入的方式引用了其他对象,在另外一个类中,只有通过spring的IOC容重中获取这个类的实例时,那些被依赖的对象才能正确被初始化,否则那些被依赖的对象都是null。

所以就有一个问题,在普通类中如何获取spring ioc容器中的bean(spring 托管的bean)。

我们都知道,在spring中ApplicationContext这个上下文对象是获取bean的基础。在spring boot中,我们可以通过下面的三种方式来获取Bean。

相关springboot学习视频:

https://www.bilibili.com/video/BV1XQ4y1m7ex

方式一

注解@PostConstruct

PostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。此方法必须在将类放入服务之前调用。

支持依赖关系注入的所有类都必须支持此注释。即使类没有请求注入任何资源,用 PostConstruct 注释的方法也必须被调用。只有一个方法可以用此注释进行注释。

应用 PostConstruct 注释的方法必须遵守以下所有标准:

  • 该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有一个 InvocationContext 对象 ;
  • 该方法的返回类型必须为 void;
  • 该方法不得抛出已检查异常;
  • 应用 PostConstruct 的方法可以是 public、protected、package private 或 private;
  • 除了应用程序客户端之外,该方法不能是 static;
  • 该方法可以是 final;
  • 如果该方法抛出未检查异常,那么不得将类放入服务中,除非是能够处理异常并可从中恢复的 EJB。
  • Spring Boot 学习笔记,这个太全了!

方式二

启动类ApplicationContext

实现方式:在springboot的启动类中,定义static变量ApplicationContext,利用容器的getBean方法获得依赖对象。推荐一个 Spring Boot 基础教程及实战示例:https://github.com/javastacks/javastack

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
/**
 * @author: clx
 * @version: 1.1.0
 */
@SpringBootApplication
public class Application {
    public static ConfigurableApplicationContext ac;
    public static void main(String[] args) {
       ac = SpringApplication.run(Application.class, args);
    }
 
}

调用方式

/**
 * @author: clx
 * @version: 1.1.0
 */
@RestController
public class TestController {
    /**
     * 方式二
     */
    @GetMapping("test2")
    public void method_2() {
        AutoMethodDemoService methodDemoService = Application.ac.getBean(AutoMethodDemoService.class);
        String test2 = methodDemoService.test2();
        System.out.println(test2);
    }
}

方式三

手动注入ApplicationContext

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
 
 
/**
 * springboot静态方法获取 bean 的三种方式(三)
 * @author: clx
 * @version: 1.1.0
 */
@Component
public class StaticMethodGetBean_3<T> implements ApplicationContextAware {
    private static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        StaticMethodGetBean_3.applicationContext = applicationContext;
    }
 
    public static <T> T  getBean(Class<T> clazz) {
        return applicationContext != null?applicationContext.getBean(clazz):null;
    }
}

调用方式

/**
 * 方式三
 */
@Test
public void method_3() {
    AutoMethodDemoService autoMethodDemoService = StaticMethodGetBean_3.getBean(AutoMethodDemoService.class);
    String test3 = autoMethodDemoService.test3();
    System.out.println(test3);
}

以上三种方式楼主都测试过可以为完美使用。

 

Spring 中获取 Bean 对象的三种方式 获取 Bean 对象的几种方式 阅读详情

相关推荐

PostConstruct注解详细使用说明及理解

@PostConstruct注解: 该注解是Java jdk提供的注解,而不是Spring框架提供的, JavaEE5引入了@PostConstruct和@PreDestroy两个作用于Servlet生命周期的注解,实现Bean初始化之前和销毁之前的自定义操作。 该注解的方法在整个Bean初始化中的执行顺序: Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的初始化方法) 官方文档:https://docs.ora.

skh2015java的博客 5万+

@PostConstruct注解,你该好好看看

在最近的工作中,get到一个很实用的注解,分享给诸位。 痛点 做过微信或支付宝支付的童鞋,可能遇到过这种问题,就是填写支付结果回调,就是在支付成功之后,支付宝要根据我们给的地址给我们进行通知,通知我们用户是否支付成功,如果成功我们就要去处理下面相应的业务逻辑,如果在测试服务,那么这个回调地址我们就需要填写测试服务的,如果发布到线上那么我们就需要改成线上的地址。 针对上面的场景,我们一般都会通...

一个程序员的成长 6150

【150期】面试官:Spring Boot 静态获取 bean 的三种方式,你知道哪些?

看完美团、字节、腾讯这三家的一二三面试问题,是不是感觉问的特别多,可能咱们真的又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。开篇有提及我可是足足背下了Java互联网工程师面试1000题,多少还是有点用的呢,换汤不换药,不管面试官怎么问你,抓住本质即可!能读到此处的都是真爱Java互联网工程师面试1000题。

2401_84424257的博客 1182

Java spring 注解 @PostConstruct 实战讲解

@PostConstruct 可以在Servlet初始化之前加载一些缓存数据,如:预热数据字典,读取properties配置文件

Java Punk 2万+

Bean的生命周期详解保姆级教程,结合spring boot和spring.xml两种方式讲解,5/7/10大小阶段详细分析

bean、spring

zhangfuping123456789的博客 1万+

Spring Boot 获取 bean 的 3 种方式,还有谁不会?

Spring Boot 获取 bean 的 3 种方式,还有谁不会

m0_55849656的博客 981

Spring Boot获取Bean的三种方式

这些方式各有优势,选择哪一种取决于具体的应用场景和需求。通过BeanFactory的方式适合轻量级应用和移动设备,而BeanFactoryAware和ApplicationContext则更适合需要完整Spring功能的场合。

2301_76419561的博客 4526

【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean)

在项目中,我们自定义一个类,如果我们想把这个类交给ioc容器管理,加上@Component衍生注解即可,如果这个类不是我们自己自定义的,是我们引入第三方依赖中的,而且我们还想把这个类交给ioc容器管理,那么我们应该定义一个方法,在这个方法上加上@Bean在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!

m0_74825502的博客 1133

超详细笔记,Spring Boot获取bean的3种方式

在使用spring框架中我们都知道,某个类如果使用了@Service、@Autowire 这种依赖注入的方式引用了其他对象,在另外一个类中,只有通过spring的IOC容重中获取这个类的实例时,那些被依赖的对象才能正确被初始化,否则那些被依赖的对象都是null。 所以就有一个问题,在普通类中如何获取spring ioc容器中的bean(spring 托管的bean)。 我们都知道,在spring中ApplicationContext这个上下文对象是获取bean的基础。在spring boot中,我们可以

Java___interview的博客 1万+

【Spring Boot 3】动态注入和移除Bean

本文介绍开发Spring Boot应用如何动态注入及移除Bean实例。获取;通过获取;通过构建;调用的方法注入。

又言又语 1787

2.2 Spring boot 配置分析 - 通过工厂方式注入bean

本章主要写的是 Spring5 通过实现FactoryBean 的方式 来注入Bean 。 初始条件: 1. Java version : 1.8 2. maven vesion: 1.3.9快速链接: 2.1 Spring5 快速入门 第一步:创建一个简单结构(quickstart)的 Maven 工程 第二步:将 Spring5 的依赖加入项目的 POM 文件中: <de

DingSJ 的博客 1万+

『SpringBoot学习笔记』Spring Boot获取spring bean的3种方式

在使用spring框架中我们都知道,某个类如果使用了@Service、@Autowire 这种依赖注入的方式引用了其他对象,在另外一个类中,只有通过spring的IOC容重中获取这个类的实例时,那些被依赖的对象才能正确被初始化,否则那些被依赖的对象都是null。 所以就有一个问题,在普通类中如何获取spring ioc容器中的bean(spring托管的bean)。 我们都知道,在spring中ApplicationContext这个上下文对象是获取bean的基础。 在spring boot中,我们.

weixin_54585403的博客 827

ESP32S3与ILI9341 LCD屏LVGL移植实战:从零构建嵌入式GUI界面

本文详细介绍了如何在ESP32S3平台上移植LVGL图形库并驱动ILI9341 LCD屏幕,从硬件选型、开发环境配置到显示驱动实现和内存优化。通过实战案例讲解移植过程中的关键步骤和常见问题解决方案,帮助开发者快速构建嵌入式GUI界面。

h9j8k7l6m5n的博客 1096

8 种从 Spring 中获取 Bean 的方式

本品文章将给大家介绍 8 种方式从 Spring IOC容器 中获取 Bean!

LU58542226的博客 2201

麒麟操作系统Kylin如何从 2203 升级到 2403

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;开始升级流程第一步:升级前准备1. 确认版本为 V10 SP1 22032. 备份全部重要数据3. 确保网络稳定4. 关闭应用第二步:选择升级方式方法一:图形界面升级方法二:命令行升级1. 更新现有系统至最新2. 启动“系统升级”工具3. 检测并开始下载2403。

让编程变的很简单!! 2653

LTE网络下的SMS收发(SMS Over SGs方案的详细流程)

关键词: IMS,SMS, LTE, MSC, MME, EPS,eNodeB, SMS Over SGs, SMS Over IMS 2G时代由于采用了比较复杂的CS/PS域架构,所以SMS(短信)作为上个世纪的产物,一直寄居在2G的CS域架构下。看看核心网的配置,其实SMS的收发还是比较复杂的。 介绍下面的信息之前你需要去百度一下这些关键词,这里我只说明比较重要的三个单元 MS 移动终端...

kevin的博客 2万+

Spring Boot 中 Bean 是什么?(包含bean的定义、作用及使用方式)

Spring Boot 中 Bean 是什么?(包含bean的定义、作用及使用方式)、SpringBoot基础、IoC容器的内容的分析。

m0_73500410的博客 2614

Python数据清洗实战:用RapidFuzz搞定模糊匹配(附完整代码示例)

本文详细介绍了在Python数据清洗中,如何利用RapidFuzz库高效解决字符模糊匹配难题。通过实战代码示例,演示了从处理拼写错误、格式不一致的脏数据,到构建实体对齐与记录去重的完整清洗管道,帮助开发者提升数据质量与处理效率。

pear55的博客 529

Spring Boot 获取 bean 的 3 种方式 还有谁不会?

方式一 注解@PostConstruct PostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。此方法必须在将类放入服务之前调用。 支持依赖关系注入的所有类都必须支持此注释。即使类没有请求注入任何资源,用 PostConstruct 注释的方法也必须被调用。只有一个方法可以用此注释进行注释。 应用 PostConstruct 注释的方法必须遵守以下所有标准: 该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据

Trouvailless的博客 888

全志 T527_Android13 编译 [ 避坑必看 ]

Swap 概念: Linux中Swap(即:交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行。当输入编译命令make -j16 的时候,会有如下提示,这是官方建议通过减少编译线程来解决编译时消耗内存过大的问题。Android 13 系统的编译流程,编译一共分为两部分:内核编译与 Android 编译。

公众号:嵌入式分享 2111

用R语言实现“中断时间序列分析” --- R code for ITS

ITS方法可用于评估一项干预措施的效果,从水平改变和斜率改变两个角度来描述干预引起的变化。

franksui的博客 4025

Spring Boot 中 Bean 实例化的实现方式详解

ConditionalOnClass(DataSource.class) // 当类路径存在 DataSource 时生效。通过 Spring Boot 的自动化机制,开发者可以告别繁琐的 XML 配置,专注于业务逻辑实现,真正实现。:通过 Maven/Gradle 依赖引入一组预配置的 Bean。// Spring Boot 内置的自动配置类(简化版)@Repository // 自动注册为 Bean。:启用 Spring Boot 的自动配置机制。@Service // 自动注册为 Bean。

m0_72696598的博客 1103

【ARM CoreLink 系列 7 -- TZC-400控制器简介】

为了确保内存能够正确识别总线的信号控制位,新增一个TrustZone地址空间控制器(TrustZone Address Space Controller,TZASC)组件来实现对内存地址的安全扩展,将内存区域划分为安全内存区域和非安全内存区域,安全世界可以访问安全内存和非安全内存,而普通世界只能访问非安全内存,如下图所示:图 1-1内存区域的划分是在系统启动时通过配置 TZASC 组件(TZC-400/TZC-380)来实现的。TZC-400由和使能情况;安全访问权限;Base地址;

CodingCos的博客 1632

Spring Boot 3 中Bean的配置和实例化详解

Spring Boot 3 中Bean的配置和实例化详解

weixin_46619605的博客 1902

conda upgrade出现Solving environment:failed CondaValueError Malformed version string invalid chars解决方案

本文主要介绍了conda install出现Solving environment:failed、CondaValueError: Malformed version string invalid character(s),希望能对使用conda的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 步骤一 2.2 步骤二

weixin_43178406的博客 8万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring Boot 的 3 种动态 Bean 注入技巧

/ 自定义条件判断逻辑@Override// 获取注解属性// 获取当前环境// 检查是否匹配// 自定义条件注解@Bean@Bean通过合理选择和组合这些技巧,我们可以构建更加灵活、模块化和可扩展的 Spring Boot 应用。关键是根据实际需求选择合适的技术,保持代码的简洁和可维护性。

z1ztai的博客 2214

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 【SpringBoot笔记】Spring中的相关配置讲解
下一篇: SpringBoot为什么这么火?看完就知道了...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值