在 Spring Boot 中,您可以以多种方式加载 Bean,这取决于项目的需求和设计。以下是一些常见的加载 Bean 的方式以及相应的示例源代码。

1.组件扫描(Component Scanning)

组件扫描是 Spring Boot 中默认的 Bean 加载方式,它会自动扫描指定包及其子包,寻找带有 @Component 及其衍生注解(如 @Service、@Repository、@Controller)的类,并将其注册为 Spring Bean。

// 示例1: 使用@Component注解声明一个Bean
@Component
public class MyComponent {
// Bean 的业务逻辑
} // 示例2: 使用@Service注解声明一个服务Bean
@Service
public class MyService {
// 服务Bean的业务逻辑
}

2.XML 配置

虽然 Spring Boot 倾向于使用注解驱动的配置,但仍支持传统的 XML 配置方式。您可以通过 XML 文件定义 Bean,然后在 Spring Boot 主类中引入这些 XML 配置。

<!-- beans.xml -->
<beans>
<bean id="myBean" class="com.example.MyBean">
<!-- Bean 属性配置 -->
</bean>
</beans>
@SpringBootApplication
@ImportResource("classpath:beans.xml")
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}

3.Java 配置类

Spring Boot 支持使用 Java 配置类定义 Bean。您可以创建一个带有 @Configuration 注解的类,在其中使用 @Bean 注解定义 Bean。

@Configuration
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}

4.条件化加载

有时,您可能只希望在特定条件下加载某些 Bean。Spring Boot 提供了条件化加载的方式,您可以使用 @Conditional 注解或实现 Condition 接口来定义加载条件。

@Configuration
public class MyConfiguration {
@Bean
@Conditional(MyCondition.class)
public MyConditionalBean myConditionalBean() {
return new MyConditionalBean();
}
}
public class MyCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// 在这里定义条件
return true; // 或者根据条件返回true或false
}
}

5.外部配置

Spring Boot 允许您在 application.properties 或 application.yml 中配置 Bean 的属性,然后使用 @Value 注解注入这些属性值。

# application.properties
myBean.name=John
myBean.age=30
@Component
public class MyBean {
@Value("${myBean.name}")
private String name; @Value("${myBean.age}")
private int age; // Getter 和 Setter 方法
}

6.自动配置

Spring Boot 自动配置是其独特的功能之一。它根据项目的依赖和配置,自动配置和加载适当的 Bean。例如,当您引入 Spring Data JPA 依赖时,Spring Boot 会自动配置 JPA 相关的 Bean,您无需手动创建它们。

7.使用第三方库自动配置

Spring Boot 也支持使用第三方库的自动配置。例如,如果您在项目中引入了 Spring Security,Spring Boot 会自动配置安全相关的 Bean。

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

上述方式是 Spring Boot 中加载 Bean 的一些常见方式,您可以根据项目的需要选择合适的方式。通常,建议使用组件扫描和 Java 配置类来加载 Bean,因为它们更符合 Spring Boot 的设计理念,同时也提供了很大的灵活性和便捷性。不同的项目可能会采用不同的加载方式,这取决于项目的规模、复杂性和团队的偏好。最重要的是确保 Bean 的加载方式符合项目的需求和设计目标。

更多技术文章,技术资源请关注公众号:架构师宝库

更多免费高清电子书PDF版本下载 book.sjtt.cc

作者简介:
公众号【架构师宝库】,头条号【架构师老卢】20年资深软件架构师,分享编程、软件设计经验,教授前沿技术,分享技术资源(每天分享一本电子书),分享职场感悟。

Spring Boot Bean的多种加载方式的更多相关文章

  1. Spring Boot自定义配置与加载

    Spring Boot自定义配置与加载 application.properties主要用来配置数据库连接.日志相关配置等.除了这些配置内容之外,还可以自定义一些配置项,如: my.config.ms ...

  2. 【spring bean】spring中bean的懒加载和depends-on属性设置

    项目结构如下: ResourceBean.java代码: package com.it.res; import java.io.File; import java.io.FileNotFoundExc ...

  3. Spring Boot 2程序不能加载 com.mysql.jdbc.Driver 问题

    用Spring Boot Starter 向导生成了一个很简单SpringBoot程序, 用到了 MySQL, 总是下面不能加载 Mysql driver class 错误. Cannot load ...

  4. spring boot的静态资源加载

    1.spring boot默认资源处理 Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性. spring boot默认加载文 ...

  5. Spring Boot 静态资源能加载css 不能加载js

    Spring Boot 配置拦截器的时候默认 是放行 静态资源 , 也就是说不需要进行配置 registry.addResourceHandler("/**") .addResou ...

  6. Spring XML Bean 定义的加载和注册

    前言 本篇文章主要介绍 Spring IoC 容器怎么加载 bean 的定义元信息. 下图是一个大致的流程图: 第一次画图,画的有点烂.

  7. spring boot注解 --@spring-boot-devtools 自动加载修改的文件和类

    spriing boot中有一个注解,是自动加载修改后的类或者文件. 使用方法为: spring-boot-devtools=true 需要引入devtools包依赖: <dependency& ...

  8. spring中Bean的懒加载

    在ApplicationContext容器中,当容器一启动时,所有的bean(单例的)都会被创建和注入依赖,这也被视为IOC容器启动过程中的一个步骤. 那如何让一个bean在需要的时候再被创建,而不是 ...

  9. Spring Boot 2 启动时加载properties文件

    每个项目从开发到测试再到上线所需要的各种环境是不同的,这就需要维护相应的配置文件,比如properties或yml文件.有了配置文件后就要考虑如何与应用进行集成. 对于云环境来讲,项目发布需要打成镜像 ...

  10. spring boot开发 静态资源加载不出来

    spring boot 1.5 版本之前 不拦截静态资源 springboot 2.x版本 拦截静态资源 private static final String[] CLASSPATH_RESOURC ...

随机推荐

  1. 使用sqlplus

    1. 执行一个SQL脚本文件 SQL>start file_name SQL>@ file_name 可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时, ...

  2. 搜索(DFS/BFS)

    广度优先搜索(BFS) 基本要点: - 利用队列(先进先出) - 一层一层搜索 - 适合于连通块的搜索 - 任何的BFS都可以转化为对树的广搜 基本流程: - 选择搜索的起点,起点入队,起点标记为已访 ...

  3. Linux第四章(80X86保护模式及其编程)

    80X86保护模式及其编程 80X86基础知识 保护模式内存管理 各种保护措施 中断和异常处理 任务管理 保护模式编程的初始化 一个简单的多任务内核 4.1 80X86系统寄存器和系统指令 为了协助处 ...

  4. 聊聊HuggingFace Transformer

    概述 参见:聊聊HuggingFace 项目组件 一个完整的transformer模型主要包含三部分:Config.Tokenizer.Model. Config 用于配置模型的名称.最终输出的样式. ...

  5. 开源XL-LightHouse与Flink、ClickHouse之类技术相比有什么优势

    Flink是一款非常优秀的流式计算框架,而ClickHouse是一款非常优秀的OLAP类引擎,它们是各自所处领域的佼佼者,这一点是毋庸置疑的.Flink除了各种流式计算场景外也必然可以用于流式统计,C ...

  6. 【接口自动化测试】Eolink Apilkit 安装部署,支持 Windows、Mac、Linux 等系统

    Eolink Apikit 有三种客户端,可以依据自己的情况选择.三种客户端的数据是共用的,因此可以随时切换不同的客户端. 我们推荐使用新推出的 Apikit PC 客户端,PC 端拥有线上产品所有的 ...

  7. golang .(type)语法

    一直弄不懂 .(type) 是啥,在 liteide 中输出 (1+1).(type),提示: use of .(type) outside type switch 于是搜索到这个文章: 作者:翔云翔 ...

  8. 6.2 Sunday搜索内存特征

    Sunday 算法是一种字符串搜索算法,由Daniel M.Sunday于1990年开发,该算法用于在较长的字符串中查找子字符串的位置.算法通过将要搜索的模式的字符与要搜索的字符串的字符进行比较,从模 ...

  9. 记一次 .NET 某餐饮小程序 内存暴涨分析

    一:背景 1. 讲故事 前些天有位朋友找到我,说他的程序内存异常高,用 vs诊断工具 加载时间又太久,让我帮忙看一下到底咋回事,截图如下: 确实,如果dump文件超过 10G 之后,市面上那些可视化工 ...

  10. linux下查找文件中某字符串出现的行以及该行前后n行

    linux下查找文件中某字符串出现的行以及该行前后n行 查找指定字符串的前后n行 grep -A 100 -B 100 "要查找的字符串" 被查找的文件 -A after 后面 - ...