Spring Boot中如何实现bean加载

在Spring Boot中,bean的加载是通过Spring框架的IoC(Inversion of Control)容器实现的。IoC容器负责管理bean的生命周期,并在需要的时候进行加载、实例化、依赖注入和销毁等操作。

Spring Boot使用的是Spring框架的核心模块Spring IoC,其工作原理如下:
1.扫描@Component注解:Spring Boot会自动扫描指定包及其子包下所有的类,查找带有@Component注解的类,并将其注册为bean。@Component注解是Spring框架的通用注解,用于标识一个类是一个组件。
2.注解驱动的bean定义:除了@Component注解,Spring Boot还支持其他注解,如@Service、@Repository、@Controller等,它们分别用于标识不同类型的组件。这些注解会被Spring Boot扫描到,并根据其类型进行特定的处理。
3.自动配置:Spring Boot会根据classpath下的配置信息,自动进行bean的配置和装配。它会根据约定大于配置的原则,根据类路径下的依赖和配置文件,为bean提供默认的配置信息。例如,Spring Boot会根据classpath下的application.properties或application.yml文件,自动配置DataSource、JPA等常用的bean。
4.条件化加载:Spring Boot还支持条件化加载bean,即根据特定的条件来判断是否加载某个bean。可以使用@Conditional注解来标识一个bean,并通过编写自定义的条件类来决定是否加载该bean。
5.手动注册bean:除了自动扫描和自动配置外,还可以通过编写配置类,手动注册bean。这可以通过在配置类中使用@Configuration注解,并在方法上使用@Bean注解来实现。

总结:Spring Boot使用Spring框架的IoC容器来实现bean的加载。它通过自动扫描注解、自动配置、条件化加载和手动注册等方式,实现bean的装配和管理。这样可以大大简化开发者的工作,提高开发效率。

下面是对五种方式的一些讲解和对比

@Service和@Repository是Spring框架中的两个常用注解,用于标识不同层次的组件。
@Service注解用于标识一个类是服务层(Service)的组件,表示该类中包含了业务逻辑的实现。
@Service注解通常用于在表示业务逻辑的类上,用于处理业务逻辑的调用、事务管理等。
被@Service注解标识的类会被Spring容器自动扫描并注册为bean,以便在其他组件中进行依赖注入。
@Repository注解用于标识一个类是数据访问层(DAO)的组件,表示该类用于访问数据库或其他数据源。
@Repository注解通常用于表示数据访问层的类上,用于执行数据库操作、查询等。
被@Repository注解标识的类也会被Spring容器自动扫描并注册为bean,以便在其他组件中进行依赖注入。

总结:

@Service注解用于标识业务逻辑层的组件,包含业务逻辑的实现。
@Repository注解用于标识数据访问层的组件,用于访问数据库或其他数据源。
两者都会被Spring容器自动扫描并注册为bean,以便在其他组件中进行依赖注入。

以下是一个使用@Conditional注解条件化加载bean的示例代码:


```java
@Configuration
public class AppConfig {
    @Bean
    @Conditional(EnvironmentCondition.class)
    public DataSource dataSource() {
        // 创建适合开发环境的DataSource
        return new DevDataSource();
    }

    @Bean
    @Conditional(EnvironmentCondition.class)
    public DataSource dataSourcemysql() {
        // 创建适合测试环境的DataSource
        return new TestDataSource();
    }

    @Bean
    @Conditional(EnvironmentCondition.class)
    public DataSource dataSourceoracle() {
        // 创建适合生产环境的DataSource
        return new ProdDataSource();
    }

}

上述代码中,@Configuration注解表示该类是一个配置类,@Bean注解表示创建一个bean对象。在这里,我们使用@Conditional(EnvironmentCondition.class)注解来设置条件,即只有在EnvironmentCondition类中的条件满足时,才会创建对应的bean。

下面是EnvironmentCondition类的代码:

public class EnvironmentCondition implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String environment = context.getEnvironment().getProperty("spring.profiles.active");
        if (environment != null && environment.equals("development")) {
            return true;    // 当前环境是开发环境,条件满足
        }
        return false;
    }
}

在EnvironmentCondition类中,我们实现了Condition接口,并重写了matches()方法。在matches()方法中,我们通过ConditionContext对象获取当前环境的属性值,并进行判断。如果满足条件,返回true,表示条件满足,对应的bean将被创建;否则返回false,对应的bean不会被创建。

以上示例中,根据当前环境的属性值来创建不同的DataSource对象,可以根据具体环境的不同来创建适合该环境的bean对象。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.1 前言 1.2 资料官网 1.3 spring boot起步之Hello World 1.4 Spring Boot返回json数据 1.5 Spring Boot热部署 1.6 Spring Boot使用别的json解析框架 1.7 全局异常捕捉 1.8 Spring Boot datasource - mysql 1.9 JPA - Hibernate 1.10 使用JPA保存数据 1.11 使用JdbcTemplate 1.12 Spring Boot修改端口号 1.13 Spring Boot配置ContextPath 1.14 Spring Boot改变JDK编译版本 1.15 处理静态资源(默认资源映射) 1.16 处理静态资源(自定义资源映射) 1.17 Spring Boot定时任务的使用 1.18 Spring Boot使用Druid和监控配置 1.19 Spring Boot使用Druid(编程注入) 1.20 Spring Boot普通类调用bean 1.21 使用模板(thymeleaf-freemarker) 1.22 Spring Boot 添加JSP支持 1.23 Spring Boot Servlet 1.24 Spring Boot过滤器、监听器 1.25 Spring Boot 拦截器HandlerInterceptor 1.26 Spring Boot启动加载数据CommandLineRunner 1.27 Spring Boot环境变量读取和属性对象的绑定 1.28 Spring Boot使用自定义的properties 1.29 改变自动扫描的包 1.30 Spring Boot Junit单元测试 1.31 SpringBoot启动时的Banner设置 1.32 Spring boot 文件上传(多文件上传) 1.33 导入时如何定制spring-boot依赖项的版本 1.34 Spring Boot导入XML配置 1.35 Spring Boot使用@SpringBootApplication注解 1.36 Spring Boot 监控和管理生产环境 1.37 Spring Boot的启动器Starter详解 1.38 Spring Boot集成Redis实现缓存机制 1.39 Spring Boot Cache理论篇 1.40 Spring Boot集成EHCache实现缓存机制 1.41 Spring Boot分布式Session状态保存Redis 1.42 Spring Boot Shiro权限管理 1.43 Spring Boot Shiro权限管理 1.44 Spring Boot Shiro权限管理 1.45 Spring Boot Shiro权限管理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值