在 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. LangChain:打造自己的LLM应用

    1.LangChain是什么 LangChain是一个框架,用于开发由LLM驱动的应用程序.可以简单认为是LLM领域的Spring,以及开源版的ChatGPT插件系统.核心的2个功能为: 1)可以将 ...

  2. 如何用 ModelScope 实现 “AI 换脸” 视频

    前言 当下,视频内容火爆,带有争议性或反差大的换脸视频总能吸引人视线.虽然 AI 换脸在市面上已经流行了许久,相关制作工具或移动应用也是数不胜数.但是多数制作工具多数情况下不是会员就是收费,而且替换模 ...

  3. FlinkSQL类型系统

    类型有什么作用, 类型可以提供编译期检查, 避免到运行期才报错. 类型 首先Flink中自己定义了一套类型, 有LogicalType和DataType两个表示 LogicalType Logical ...

  4. Amiya 前端UI

    最近在使用一个基于Ant Design 二次封装的组件 Git文档地址 Index - Amiya (gitee.io)

  5. langchain中的LLM模型使用介绍

    简介 构建在大语言模型基础上的应用通常有两种,第一种叫做text completion,也就是一问一答的模式,输入是text,输出也是text.这种模型下应用并不会记忆之前的问题内容,每一个问题都是最 ...

  6. iOS发送探针日志到日志系统的简单实现

    通过参考Testin的SDK实现方式,我们大致可以确定他们背后的实现方式: 首先,通过加载Testin的SDK,然后收集各种七七八八的数据,再通过socket发送数据到云端. 云端我们已经有了,就是h ...

  7. 集群部署专题之一:详解集群间SSH无密码登录配置步骤

    一.SSH简介 SSH(Secure Shell)是一种网络安全协议,通过加密和认证机制实现安全访问和文件传输等业务.传统远程登录和文件传输方式有Telnet或FTP,这两种方式都使用明文传输数据,存 ...

  8. warning in ./src/router/index.js (Emitted value instead of an instance of Error) Error compiling template: Uncaught (in promise) TypeError: Cannot set properties of undefined (setting 'jsoninfo'

    目录 warning in ./src/router/index.js (Emitted value instead of an instance of Error) Error compiling ...

  9. 文心一言 VS 讯飞星火 VS chatgpt (102)-- 算法导论9.3 8题

    八.用go语言,设 X[1..n]和 Y[1..n]为两个数组,每个都包含n个有序的元素.请设计一个 O(lgn)时间的算法来找出数组 X和Y中所有 2n 个元素的中位数. 文心一言: 要在 O(lg ...

  10. Vue2系列(lqz)——Vue介绍

    文章目录 Vue入门 零:前端目前形势 前端的发展史 一:Vue介绍 和 基本使用 1.Vue介绍 渐进式框架 网站 2.Vue特点 易用 灵活 高效 3.M-V-VM思想 ① MVVM介绍 ② MV ...