首页 > 其他分享 >Spring Boot Bean的多种加载方式

Spring Boot Bean的多种加载方式

时间:2023-11-03 13:55:41浏览次数:100  
标签:Spring Boot public Bean class 加载

 


在 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,public,Bean,class,加载
From: https://www.cnblogs.com/hanbing81868164/p/17807448.html

相关文章

  • 微服务+Spring Cloud的建筑工地智慧管理平台源码
    智慧工地全套源码(PC端,移动端,大屏端)智慧工地系统充分利用计算机技术、互联网、物联网、云计算、大数据等新一代信息技术,以PC端,移动端,设备端三位一体的管控方式为企业现场工程管理提供了先进的技术手段。让劳务、设备、物料、安全、环境、能源、资料、计划、质量、视频监控等十大管理......
  • springboot配置静态资源访问
    重写WebMvcConfigurer中的addResourceHandles1.配置静态资源地址 2.重写 完整代码@ConfigurationpublicclassInterceptorConfigimplementsWebMvcConfigurer{@Value("${file.path}")privateStringpath;//D:/ndedu/image/@Value("${file.stat......
  • Spring/SpringBoot中的声明式事务和编程式事务源码、区别、优缺点、适用场景、实战
    一、前言在现代软件开发中,事务处理是必不可少的一部分。当多个操作需要作为一个整体来执行时,事务可以确保数据的完整性和一致性,并避免出现异常和错误情况。在SpringBoot框架中,我们可以使用声明式事务和编程式事务来管理事务处理。其中事务的坑也是不少,比较常见的就是事务失效,大家......
  • SpringSecurity的学习
    前置知识1.RBAC关系模型   这个图片很清晰了,一个用户可以对应多个角色一个角色可以对应多个权限,这样子我们就可以引出我们所设计的数据库用户,角色,权限共三张表,再通过两张表将他们连起来,这样子就可以进行权限控制,知道用户就可以得知该用户可以访问哪些模块,不能访问哪些模块......
  • Spring,依赖注入
    一、首先创建一个拥有各种类型的实体类,添加构造方法,get&set还有toString方法 二、在配置文件中实例化对象,并且赋值  每种类型都有自己的赋值方式 三、测试之后也可以得到我们赋值结果,JSON格式的 ......
  • springboot-vue 项目
    一、后端 @Controller一般 在controller中return返回的是一个地址@RestController返回的是一个数据(json),在前后端分离都是用@RestController @RequestParam   与浏览器上的值作为绑定(如果name写错,也能传递),不过写了之后一定要传 @RequestBody 传递json格式......
  • Springboot使用return跳转到html页面只是返回字符串,不跳转问题的解决
    问题描述我在使用SpringBoot进行页面跳转时,发现其只是返回相应的字符串,并不会出现页面跳转:问题解决不要在Controller层加@Responsebody注解,不然就只会默认是返回字符串,而不会返回页面;......
  • Springmvc和mybatis和spring的整合
    一.springmvc工作原理springmvc常用的组件为SpingMVC的常用组件:1)DispatcherServlet是一种前端控制器,由框架提供。作用:统一处理请求和响应。除此之外还是整个流程控制的中心,由DispatcherServlet来调用其他组件,处理用户的请求2)HandlerMapping处理器映射器,由框架提供。作用:......
  • Spring,IOC创建对象的方式,无参有参
    创建一个spring模块,创建有无参构造的User实体类  方式一、无参构造创建对象  (默认的)我们知道:创建对象是调用了实体类中的构造方法的Spring这边通过配置文件也是默认调用了无参构造 二、有参构造创建对象用法1、通过下标赋值  index=“0” 因为User中就一个nam......
  • Springmvc的学习
    导入jar包编写配置文件(点击Namespaces添加context、mvc)springmvc.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ......