SpringBoot 向容器中注册组件的方法总结

哪些对会交由SpringBoot容器管理? 摘要: Spring Boot 管理的对象称为"Spring Bean",通过注解声明(如@Component、@Service)、自动配置或手动注册(@Bean)等方式由容器统一管控。核心机制包括组件扫描(默认主启动类所在包)、自动配置(如WebMvcAutoConfiguration)及配置类定义。未被注解标记的普通类或局部变量不会被容器管理。可通过依赖注入或ApplicationContext验证对象是否受管,这是Spring依赖注入和AOP实现的基础。 阅读详情

系列文章目录

Spring Boot是在Spring 基础上提供了一套全新的开源的框架,它具有 Spring 一切优秀特性,而且使用更加简单,功能更加丰富,性能更加稳定而健壮。Spring Boot 提供了大量开箱即用(out-of-the-box)的依赖模块,例如 spring-boot-starter-redis、spring-boot-starter-data-mongodb 和 spring-boot-starter-data-elasticsearch 等。这些依赖模块为 Spring Boot 应用提供了大量的自动配置,使得 Spring Boot 应用只需要非常少量的配置甚至零配置,便可以运行起来,让开发人员从 Spring 的“配置地狱”中解放出来,有更多的精力专注于业务逻辑的开发,即"约定大于配置"。



前言

对象,类,包,模块,组件,容器,框架,这些java属于他们都有一个共同的特点:容纳.

对象(Object):

  在java的世界里,对象是通过属性和方法来分别对应事物所具有的静态属性和动态属性.

类(Class):

  用于描述同一类型的对象的一个抽象的概念.

对象和类的关系:

  类是具有共同的属性名称和行为的一组对象的抽象,而对象则是一个类的真实的例子。

组件(component):

  组件也是抽象的概念,可以理解为一些符合某种规范的类组合在一起就构成了组件。他可以提供某些特定的功能。
  J2EE来说,有什么servlet,jsp, javabean,ejb都是组件。但实际他们都是类,只不过有他们特殊的规定。

组件和类的关系:符合某种规范的类的组合构成组件.

容器(Container):

 容器也叫做组件容器,组件容器是一种比较特殊的组件,它可以包含其他的组件。我们可以把组件放在组件容器中。
 反之,如果一个组件不是组件容器,则其中不能包含其他的组件。
 组件容器也是一种组件,所以一个组件容器可以放在另一个组件容器中。 
 组件容器的出现使得事情变得复杂了起来。我们可以把组件放在组件容器里,也可以把组件容器放在另一个组件容器里,这样就形成了有层次的组件结构。
 我们可以把普通的组件想像成为鸡蛋,而把组件容器想像成为篮子。
 那么,鸡蛋可以放在小篮子里,小篮子和别的鸡蛋又可以放在大篮子里。于是 ,篮子里可以有鸡蛋,还可以有其他的篮子。

应博友要求,本篇主要讲述SVM的的近红外光谱定性分析建模方法

一、注册组件的4种方法

组件的注册,其实就是类的实现与反射,只有在容器中的组件,才会拥有SpringBoot提供的强大功能。常见的注册组件的方法如下4类。

  • 1、包扫描+组件标注注解(@Component、@Service、@Controller、@Repository,主要是自己写的类
  • 2、@Bean[导入的第三方包里面的组件]
  • 3、@Import[快速给容器中导入一个组件]
  •      1、Import(类名),容器中就会自动注册这个组件,id默认是组件的全名
    
  •      2、ImportSelector:返回需要导入的组件的全类名的数组
    
  •      3、ImportBeanDefinitionRegistrar:手动注册bean
    
  • 4、使用Spring提供的FactoryBean(工厂bean)
  •      1、默认获取到的是工厂bean调用getObject创建的对象
    
  •      2、要获取到bean本身,需要给id前面加个&标识
    
  • @Conditional({Condition}):按照一定的条件判断,满足条件给容器中注册bean

二、包扫描+组件标注注解

1、配置类,标明注解扫描的范围

//告诉Spring这是一个配置类
@Configuration
//注解所扫描的范围,类似于spring配置文件的 context:component-scan


@ComponentScan(value="com.java")
public class MainConfig {

}

2、注解

//标识表现层
@Controller
public class BookController {
 
}

三、@bean导入(最常用的方法)

对于一个创建person类而言

@NoArgsConstructor
//@AllArgsConstructor
@Data
@ToString
@EqualsAndHashCode
public class User {

    private String name;
    private Integer age;

    private Pet pet;

    public User(String name,Integer age){
        this.name = name;
        this.age = age;
    }
}

使用@bean进行注册

@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
//@ConditionalOnBean(name = "tom")
@ConditionalOnMissingBean(name = "tom")
@ImportResource("classpath:beans.xml")
//@EnableConfigurationProperties(Car.class)
//1、开启Car配置绑定功能
//2、把这个Car这个组件自动注册到容器中
public class MyConfig {


    /**
     * Full:外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
     * @return
     */

    @Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        //user组件依赖了Pet组件
        zhangsan.setPet(tomcatPet());
        return zhangsan;
    }

    @Bean("tom")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }


}

查看是否注册成功

        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);

        boolean user01 = run.containsBean("user01");
        System.out.println("容器中user01组件:"+user01);

注意1:@Bean 在给容器中添加组件,默认以方法名作为组件的id,返回类型就是组件类型,返回的值,就是组件在容器中的实例。如果不想默认,@Bean中(“xxxxx”)设置组件的ID。
注意2:@Configuration(proxyBeanMethods = false or true) //这个属性是并不是决定容器中的组件是单例还是多例的。如果说他是true,就是单例。如果说是false,但却不是多例。当他为true的时候,我们在容器中获取到的对象总是同一个,即便是我们调用了创建对象的方法,那获取到的还是同一个。但是当是多例的时候,如果我们调用了创建对象的方法,那就不是同一个了。但是我们如果是用getBeans方法去获取的话,那样还是单例的,我们得到的还是同一个对象。默认为true。

四、@Conditional({Condition})注册

一般用于组件的依赖,只有@ConditionalOnBean(name = “tom”)注册的组件存在才会进行对该组件有依赖的组件进行注册。

 * 4、@Import({User.class, DBHelper.class})
 *      给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
 *
 *
 *
 */

@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
}

五、@ImportResource注册

用于使用xml写的老版本组件的注册

@ImportResource("classpath:beans.xml")

其中,xml文件如下:

 <bean id="haha" class="com.atguigu.boot.bean.User">
        <property name="name" value="zhangsan"></property>
        <property name="age" value="18"></property>
    </bean>

    <bean id="hehe" class="com.atguigu.boot.bean.Pet">
        <property name="name" value="tomcat"></property>
    </bean>
基于 Datawhale 开源量化投资学习指南(10):基于 LightGBM 的量化选股 通过本篇文章,我们深入探索了如何运用 LightGBM 机器学习模型实现量化选股。首先,我们通过获取股票的历史数据,进行特征工程和标签制作,将选股问题转化为一个分类问题。接着,我们使用 LightGBM 训练模型,并在验证集和测试集中评估了模型的表现。该选股策略的核心在于结合机器学习算法,从历史数据中寻找能够捕捉股票短期涨跌的关键特征,从而为投资者提供辅助决策支持。虽然本文的模型取得了一定的效果,但这只是量化投资领域的一小部分。 阅读详情

相关推荐

Hive SQL零基础到精通:100道练习题+答案,SQL能力快速提升

我将以我15年架构与开发的经验,带领大家从零基础到精通,通过精心设计的100道练习题及其详解,系统地、深度地掌握Hive SQL的核心精髓。它可以将结构化的数据文件映射为一张数据库表,并提供了一套类SQL的查询语言——HiveQL(简称HQL),允许熟悉SQL的用户直接查询存储在HDFS上的海量数据。它将Job描绘为DAG(有向无环图),允许更灵活的任务编排,避免不必要的中间落盘,可以复用容器,从而大幅降低延迟。希望你以此文为起点,在广阔的大数据世界里继续遨游,成为一名真正的数据高手!

架构师的AI之路,分享AI应用开发架构的学习与实践。 799

springboot 组件注册

本文介绍的方法比较简洁,需要有Spring基础 方法一:包扫描+注解 1.配置类,标明注解扫描的范围 //告诉Spring这是一个配置类 @Configuration //注解所扫描的范围,类似于spring配置文件的 context:component-scan @ComponentScan(value="com.java") public class MainConfig { ...

GSON的博客 542

一文搞懂【Linux 搭建 Dread Hunger 服务器】附本体及Docker部署集群方案

看直播发现了五花八门的开服器和版本,一时兴起按官方文档进行了搭建尝试,所以我的版本基于官方Stream2024.01.10更新的版本,也就是停服时的玩法,应该可以根据mod和补丁魔改成更那些开服器一样的版本,本文不做谈论,注重服务器搭建,毕竟8个人不可能在一个局域网里乱象:首先,我看了大量教程视频,一类是开服器的推广,另一类自建的基本采用Windows搭建,我觉得最离谱的是大部分教程都会教你买一台远程Windows虚拟机???

LHmine的博客 3987

springboot 组件的注册、注入、生命周期

在类中定义相关方法System.out.println("初始化---------------");System.out.println("销毁----------------");@Bean注册为组件时,指明方法@Bean创建对象调用类构造器@Autowired set属性注入InitializingBean(afterPropertiesSet属性设置之后)init-----------------ioc容器创建完毕-------------------PreDestroy。

dudhvd的博客 1244

gtsam官方文档: The new IMU Factor学习笔记

gtsam官方文档:The new IMU Factor 本文为gtsam imu预积分文档学习笔记,为gtsam基于切向量实现的imu预积分的理论基础。 导航状态 定义导航状态为 Xbn={Rbn,Pbn,Vbn}X^n_b=\{R^n_b,P^n_b,V^n_b\}Xbn​={Rbn​,Pbn​,Vbn​} 上角标n:导航(navigation)坐标系 下角标b:载体(body)坐标系 下文均省略上下标 矢量场与微分方程 对于导航问题我们用如下微分方程描述 X˙(t)=F(t,X)\dot X(t)

南柯一梦的博客 1612

Fluent温度超限调试:从能量方程到网格优化的实战指南

本文深入解析Fluent中温度超限问题的诊断与解决方法,从能量方程机制到网格优化策略,提供实战指南。通过分析温度与焓的换算关系,探讨典型场景如能量方程发散、局部网格质量差等,并给出五步调试法及高级命令应用,帮助工程师有效解决温度计算异常问题。

weixin_29045585的博客 531

SpringBoot - 向容器中注册组件的方法有哪些?

向容器中注册组件的方法常见的有以下几种方式:@Configuration、@Bean、@ComponentScan、@Conditional、@Import、@FactoryBean。

记录并分享 701

RAGFlow升级指南(纯小白都看得懂)

升级背景:RAGFlow项目原来的版本是0.17.0版本,在使用过程中,发现当知识库检索为空的时候并且使用到rerank模型的时候,就会输出错误的信息;为了解决这个版本问题,特意升级到最新的版本0.17.2(截止2025-3-14时最新版本就是0.17.2了)官方升级文档https://ragflow.io/docs/dev/upgrade_ragflow官方文档对小白还是不太友好,作者也是捣鼓了十多分钟,特出下面的升级指南前提:旧版本的RAGFlow项目是启动好了的1.在ragflow目录下执行(拉取最新

Ven%的博客 3596

Spring Boot 常用注解整理

现代的 Spring 与 Spring Boot 应用大量使用注解来简化配置、管理组件和实现各种框架功能。本文系统整理了常用的 Spring/Spring Boot 注解,按照功能分类进行介绍。每个注解都会涵盖其含义、提供来源、应用场景以及代码示例,帮助开发者深入理解和快速检索。简介: 是 Spring Boot 应用的主入口注解。它标注在启动类上,表示这是一个 Spring Boot 应用。该注解由 Spring Boot 提供(位于 包),本质上是一个组合注解,包含了 Spring Framewor

qq_42184486的博客 1316

由ip地址和子网掩码求网络号、主机号、广播地址(超详细)

1、用二进制数表示IP地址   在进行计算之前,我们首先要学会十进制的IP地址怎么转换为二进制的IP地址。   给出一个例子: 十进制:172.16.25.3 二进制:10101100.00010000.00011001.00000011 1、如果两台主机的网络号相同,我们就说它们是同一网段 2、主机号的意义 - 1)主机号部分全变成1,即为该网段的广播地址 - 2)主机号部分全变成0,即为该网段的网路地址(网络号) 3、如果主机号部分为x位,则该网络能容纳最大主机数为: 2的x次方-2。减2

爱吃雪糕的小布丁的博客 9万+

vue3+vite:引入tailwindcss不生效的原因,详细解决Tailwind配置没问题但就是不生效的情况,配置正确无报错但样式没有生效(包括tailwindcss在Vue2使用不生效解决方案)

vue3 tailwind使用教程以及tailwind不生效的问题,vue3+vite引入tailwindcss不生效的原因,tailwindcss配之后不生效怎么办,如何解决tailwinscss不生效的原因,Vue3项目使用tailwindcss在Vue2使用,不生效解决,如何解决使用 Tailwind CSS 后出现的样式不生效的问题?tailwindcss配之后不生效 tailwindcss不生效,为什么我的 Tailwind css 类没生效,解决使用 Tailwind 时样式不生效的问题,配置没

✅ 精选推荐文章 4128

SpringBoot中BeanDefinition的注册顺序

SpringBoot BeanDefinition的注册顺序 为什么要了解BeanDefinition的注册顺序 在spring中了解BeanDefinition的注册顺序可以更好的把握Bean的创建顺序,当在beanFactory.getBean()抛出Bean不存在的时候,就说明在那个时刻BeanFactory中并没有那个BeanDefinition的存在,或许在之后会被注册到BeanFactoy中,之所以会出现这个错误是因为,在获取这个Bean的时候不存在这个Bean的BeanDefinition。

Hhd2233的博客 1380

WEB浏览器视频流播放方案

基于Media Source Extensions播放视频流 浏览器播放视频的几种方法 一、H5 video标签 在浏览器播放视频,可以使用HTML5原生的video标签。但其播放的格式使用一定限制的,目前video只支持三种格式WebM、Ogg、MP4。 WebM:WebM 文件使用 VP8 视频编解码器和 Vorbis 音频编解码器 Ogg :Ogg 文件使用 Theora 视频编解码器和 Vorbis音频编解码器 MP4: MPEG 4文件使用 H264 视频编解码器和AAC音频编解码器 上面三种

machh的专栏 2382

springboot给容器中注册组件的方法及配置绑定

/</</

qq_38256519的博客 199

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SpringBoot给容器中注册组件的四种方法(简易版)

本文介绍的方法比较简洁,需要有Spring基础   方法一:包扫描+注解 1.配置类,标明注解扫描的范围 //告诉Spring这是一个配置类 @Configuration //注解所扫描的范围,类似于spring配置文件的 context:component-scan @ComponentScan(value="com.java") public class MainConfig { ...

qq_41075649的博客 2831

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SpringBoot修改servlet容器配置、注册三大组件、切换servlet容器

一、修改Servlet容器配置 Springboot默认servlet容器是Tomcat 1、通过yaml修改 绑定的是ServerProperties配置类 注意,这里通过配置类修改的容器设置会覆盖掉yaml的,也就是说配置类的优先级高于yaml,亲测 2、编写WebServerFactoryCustomizer配置方法 通过serlvet工厂类来修改容器配置 WebServerFactoryCustomizer: @Bean public WebServerFactoryCusto

半山腰太挤了,你要去山顶看看 711

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

[SpringBoot] Spring Boot注册Web原生组件/拦截器HandlerInterceptor

Spring Boot注册Web原生组件, 拦截器HandlerInterceptor

沫洺的博客 1283

Springboot配置嵌入式服务器

修改和server有关的配置(ServerProperties);在yml配置文件的写法:由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。SpringBoot帮我们自动SpringMVC的时候,自动的注册SpringMVC的前端控制器;DispatcherServlet;DispatcherServletAutoConfiguration中:

秃头之旅 1088

SpringBoot基础之注册Servlet三大组件

SpringBoot默认是以jar包的方式运行嵌入式Servlet容器来启动应用,没有web.xml文件,所以Spring提供以下Bean来注册三大组件。注册自定义Servlet注册自定义Filter注册自定义Listener除了以上的方法也可以使用传统的@WebFilter…实现注册,但是这样只能注册声明自己创建的类,在将来我们会用到很多框架提供的类,就无法使用传统的注解注册,所以推荐使用以上配置类的方式注册Servlet。

A_diligent_man的博客 1178

SpringBoot如何配置嵌入式Servlet容器

SpringBoot如何配置嵌入式Servlet容器1. 如何定制和修改Servlet容器的相关配置1.1 修改和server有关的配置1.1.1 通过配置文件来修改1.1.2 编写EmbeddedServletContainerCustomizer2. 注册Servlet三大组件2.1 注册Servlet2.2 注册Filter2.3 注册Listener3.将Tomca替换为其他嵌入式Servlet容器4. 使用外置的Servlet容器 SpringBoot默认使用Tomcat作为嵌入式的Servlet

木讷的鱼 543

SpringBoot之配置嵌入式Servlet容器

1、概述 SpringBoot默认使用Tomcat作为嵌入式的Servlet容器 2、如何修改SpringBoot的默认配置 修改SpringBoot默认配置主要有以下三种模式: (1)SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(@Bean、@Component)如果有就用用户配置的;如果没有,才自动配置;如果有些组件可以有多个(ViewResolver)将用户...

HTZW的博客 354

SpringBoot 配置嵌入式Servlet容器(tomcat,jetty,undertow)

SpringBoot 默认打包方式为jar包,且可以自启动,就是因为它内嵌了Servlet容器。 SpringBoot 默认使用嵌入式Servlet容器,SpringBoot 2.2.5 默认是 Tomcat 9.0.19,(SpringBoot 默认支持三种Servlet容器:tomcat,jetty,undertow)。 使用SSM的时候,我们可以根据自己的需求来定制容器的相关参数,那么在...

Charge8的博客 3290

SpringBoot 配置嵌入式Servlet容器&使用外置的Servlet容器

配置嵌入式Servlet容器&使用外置的Servlet容器配置嵌入式Servlet容器1. 如何定制和修改Servlet容器的相关配置 配置嵌入式Servlet容器 1. 如何定制和修改Servlet容器的相关配置 1)、修改和server有关的配置(ServerProperties【也是WebServerFactoryCustomizer】); server.port=8081 server.context‐path=/crud server.tomcat.uri‐encoding=UTF‐

weixin_44962371的博客 258

SpringBoot的嵌入式servlet容器

SpringBoot的嵌入式servlet容器1、SpringBoot默认的servlet容器2、嵌入式servlet配置修改2.1、通过全局配置文件修改2.2、通过WebServerFactoryCustomizer接口的Bean修改 1、SpringBoot默认的servlet容器 SpringBoot默认的servlet容器是tomcat,如下图所示: 2、嵌入式servlet配置修改 2.1、通过全局配置文件修改 1、可以通过 server.xxx 来进行 web 服务配置,没有带服务器名称

qq_41931364的博客 1762

SpringBoot配置嵌入式Servlet容器

Spring Boot配置嵌入式Servlet容器的一些思考 : 注册 Servlet Filter、Listener当使用嵌入式的Servlet容器(Tomcat、Jetty等)时,我们通过将Servlet、Filter和Listener声明为Spring Bean而达到注册的效果;或者注册ServletRegistrationBea...

菜鸟清风http://www.hphblog.cn/ 763

SpringBoot学习05-[SpringBoot的嵌入式Servlet容器]

【代码】SpringBoot学习05-[SpringBoot的嵌入式Servlet容器]

Java修炼者的博客 455
上一篇: 基于SVM的近红外光谱建模
下一篇: Java面经-海康威视
Echo_Code
博客等级 码龄7年 795粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值