首页 > 其他分享 >【Spring】Bean管理

【Spring】Bean管理

时间:2024-06-18 18:42:49浏览次数:23  
标签:容器 管理 Spring bean 获取 Bean IOC 第三方

获取Bean

要从IOC容器当中来获取到bean对象,需要先拿到IOC容器对象

 @Autowired
 private ApplicationContext applicationContext; //IOC容器对象

Spring容器中提供了一些方法,可以主动从IOC容器中获取到bean对象,下面介绍3种常用方式:

  1. 根据name获取bean

    Object getBean(String name)
    
  2. 根据类型获取bean

    <T> T getBean(Class<T> requiredType)
    
  3. 根据name获取bean(带类型转换)

    <T> T getBean(String name, Class<T> requiredType)
    

示例代码

@SpringBootTest
class SpringbootWebConfig2ApplicationTests {

    @Autowired
    private ApplicationContext applicationContext; //IOC容器对象

    //获取bean对象
    @Test
    public void testGetBean(){
        //根据bean的名称获取
        DeptController bean1 = (DeptController) applicationContext.getBean("deptController");
        System.out.println(bean1);

        //根据bean的类型获取
        DeptController bean2 = applicationContext.getBean(DeptController.class);
        System.out.println(bean2);

        //根据bean的名称 及 类型获取
        DeptController bean3 = applicationContext.getBean("deptController", DeptController.class);
        System.out.println(bean3);
    }
}

Bean作用域

作用域 说明
singleton 容器内同名称的bean只有一个实例(单例)(默认)
prototype 每次使用该bean时会创建新的实例(非单例)
request 每个请求范围内会创建新的实例(web环境中,了解)
session 每个会话范围内会创建新的实例(web环境中,了解)
application 每个应用范围内会创建新的实例(web环境中,了解)

可以借助Spring中的@Scope注解来进行配置作用域

@Bean

第三方提供的类是只读的。无法在第三方类上添加@Component注解或衍生注解。需要用到@Bean注解获取第三方Bean。

在启动类上添加@Bean标识的方法

@SpringBootApplication
public class SpringbootWebConfig2Application {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootWebConfig2Application.class, args);
    }

    //声明第三方bean
    @Bean //将当前方法的返回值对象交给IOC容器管理, 成为IOC容器bean
    public SAXReader saxReader(){
        return new SAXReader();
    }
}

说明:以上在启动类中声明第三方Bean的作法,不建议使用(项目中要保证启动类的纯粹性)

在配置类中定义@Bean标识的方法

如果需要定义第三方Bean时, 通常会单独定义一个配置类

@Configuration //配置类  (在配置类当中对第三方bean进行集中的配置管理)
public class CommonConfig {

    //声明第三方bean
    @Bean //将当前方法的返回值对象交给IOC容器管理, 成为IOC容器bean
          //通过@Bean注解的name/value属性指定bean名称, 如果未指定, 默认是方法名
    public SAXReader reader(DeptService deptService){
        System.out.println(deptService);
        return new SAXReader();
    }

}

在方法上加上一个@Bean注解,Spring 容器在启动的时候,它会自动的调用这个方法,并将方法的返回值声明为Spring容器当中的Bean对象。

注意事项 :

  • 通过@Bean注解的name或value属性可以声明bean的名称,如果不指定,默认bean的名称就是方法名。

  • 如果第三方bean需要依赖其它bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配。

标签:容器,管理,Spring,bean,获取,Bean,IOC,第三方
From: https://www.cnblogs.com/hudad/p/18254940

相关文章

  • 智能网站管理系统
    智能网站管理系统,即智能化的网站管理工具,是为了提高网站管理效率和简化操作流程而开发的一种软件系统。它集合了各种先进的技术和功能,为网站管理员提供了一套强大而可靠的解决方案。智能网站管理系统的核心功能是网站内容管理。传统的网站管理需要通过手动编辑HTML代码来实现......
  • 计算机Java项目|房屋租赁管理系统的设计与实现
    作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助收藏点赞不迷路 ......
  • 【Spring】AOP
    AOP英文全称:AspectOrientedProgramming(面向切面编程、面向方面编程)。在程序运行期间在不修改源代码的基础上对已有方法进行增强(无侵入性:解耦)AOP快速入门pom.xml<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</......
  • springboot 使用 doris-streamloader 到doris 防止批量更新 事务卡主
    背景:使用mybatis批量实时和更新doris时经常出现连接不上的错误,导致kafka死信队列堆积很多滞后消费https://doris.apache.org/zh-CN/docs/2.0/ecosystem/doris-streamloader/packagecom.jiaoda.sentiment.data.etl.service.update;importcn.hutool.core.text.CharSequenc......
  • thymeleaf+Springboot实现试卷导出为Word
    实习期间遇到了一个这样的需求,业务要求将试题详情进行导出。但是看到页面展示的试题详情后,发现是使用<div>等标签遍历的数据,这就需要在服务端将数据进行处理,以下为我的实现方式:在html页面里,可以这样请求:varurl="请求路径/方法名?"参数A="+参数A的值+"&参数B="+e参数B的值;......
  • 使用volta管理前端开发环境
    背景:公司有新老不同的产品,使用的node版本不一样,每次都要手动切换node版本,对应的项目才能运行。这样很麻烦,有没有好的解决方法,就找到了volta。1.为什么是volta?管网介绍:使用Volta,一旦您选择了Node引擎,您就不必担心它。切换项目不需要您手动切换版本。跨平台支持,包括W......
  • 视频汇聚安防综合管理系统EasyCVR平台GB28181设备注册未上线的原因排查与解决
    视频汇聚安防综合管理平台EasyCVR视频监控系统基于云边端架构,可支持海量视频汇聚集中管理,能提供视频监控直播、云端录像、云存储、录像检索与回看、告警(协议告警/智能告警/1400视图库告警)、平台级联、AI智能分析接入等视频能力服务。平台具备强大的兼容性,支持多协议、多类型设备接......
  • spring boot jpa 进行通用多条件动态查询和更新 接口
    原因:jpa没有类似于mybatis的那种拼接sql的方式想动态更新需要使用CriteriaUpdate的方式去一直拼接,其实大多数场景只要传入一个非空实体类,去动态拼接sql1.定义实体类继承一个统一的类型@Data@ToString@Entity@Table(name="sys_user")@DynamicInsert@JsonIgno......
  • 多租户的后台管理系统框架涉及到在不同租户之间隔离数据(字段隔离)------------升鲜宝供
    在多租户系统中,为了区分平台级用户和租户级用户,我们通常会使用一个特定的租户ID来表示平台级用户和角色。这种设计确保了平台级用户和角色能够被正确识别和管理,而不会与任何具体租户的用户和角色混淆。###设计方案1.**特定租户ID**:使用一个特定的租户ID(例如,`0`或`1`)来表......
  • 视频汇聚安防综合管理平台EasyCVR支持GA/T1400视图库标准及设备接入配置
    一、概述视频汇聚安防综合管理平台EasyCVR视频监控系统已经与公安部GA/T1400视图库标准协议实现了对接,即《公安视频图像信息应用系统》。安防监控系统EasyCVR支持采用GA/T1400进行对接,可实现人脸数据使用的标准化、合规化。其采用统一接口对接雪亮工程视频监控系统以及其他系......