关于Spring Boot获取bean的3种方式

 更新时间:2023年04月21日 10:38:21   作者:link可  
这篇文章主要介绍了关于Spring Boot获取bean的3种方式,在spring中ApplicationContext这个上下文对象是获取bean的基础,需要的朋友可以参考下

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

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

我们都知道,在spring中ApplicationContext这个上下文对象是获取bean的基础。

在spring boot中,我们可以通过下面的三种方式来获取Bean。

方式一 注解@PostConstruct

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

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

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

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

方式二 启动类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 Boot获取bean的3种方式的文章就介绍到这了,更多相关Spring Boot获取bean内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MybatisPlus操作符和运算值详解

    MybatisPlus操作符和运算值详解

    在前端到后端的数据传递中,处理动态运算条件是一个常见的需求,本文介绍了如何在MybatisPlus中处理运算符和运算值的动态拼接问题,感兴趣的朋友一起看看吧
    2024-10-10
  • Java设计模式之状态模式

    Java设计模式之状态模式

    这篇文章介绍了Java设计模式之状态模式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • Spring如何集成ibatis项目并实现dao层基类封装

    Spring如何集成ibatis项目并实现dao层基类封装

    这篇文章主要介绍了Spring如何集成ibatis项目并实现dao层基类封装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • java servlet结合Oracle搭建java的web开发环境

    java servlet结合Oracle搭建java的web开发环境

    今天我将与大家分享一下我学JAVA WEB写的一些小实例 ,我个人是不太喜欢书本上的晦涩的概念的,所以我花了更多的时间在一些应用实例上,我觉得这样的学习方式很适合我,由简到繁,由浅入深
    2015-12-12
  • Java实现将CSV转为Excel的示例代码

    Java实现将CSV转为Excel的示例代码

    CSV(Comma Separated Values)文件是一种纯文本文件,包含用逗号分隔的数据,常用于将数据从一个应用程序导入或导出到另一个应用程序。本文将利用Java实现CSV转为Excel,感兴趣的可以了解一下
    2022-03-03
  • Spring boot整合Mybatis实现级联一对多CRUD操作的完整步骤

    Spring boot整合Mybatis实现级联一对多CRUD操作的完整步骤

    这篇文章主要给大家介绍了关于Spring boot整合Mybatis实现级联一对多CRUD操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • Java中调用DLL动态库的操作方法

    Java中调用DLL动态库的操作方法

    在Java编程中,有时我们需要调用本地代码库,特别是Windows平台上的DLL(动态链接库),本文中,我们将详细讨论如何在Java中加载和调用DLL动态库,并通过具体示例来展示这个过程,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Java Listener监听器使用规范详细介绍

    Java Listener监听器使用规范详细介绍

    监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变
    2023-01-01
  • 在SpringBoot项目中如何实现线程池的动态监控

    在SpringBoot项目中如何实现线程池的动态监控

    Spring Boot因其简便、高效的特点广受开发者喜爱,在复杂的业务场景下,如何确保Spring Boot应用的高性能和稳定性成为了一个关键问题,其中,线程池的管理策略直接影响到系统的吞吐量和资源利用效率,本文将重点探讨在Spring Boot项目中,如何实现线程池的动态监控
    2023-10-10
  • Spring controller校验入参的方法详解

    Spring controller校验入参的方法详解

    项目中使用Springboot,在Controller中配置了@NotNull和@Valid,@Notnull不生效,@Valid生效,返回http status为400,本文给大家介绍了Spring controller校验入参的方法,需要的朋友可以参考下
    2024-06-06

最新评论