`

Spring Boot自动配置原理(@Conditional @Import)

 
阅读更多
Springboot的自动配置是SpringBoot的关键,主要是通过@Conditional这个注解来进行配置。

1.@Conditional
@Conditional这个注解指的是:满足某一个特定条件创建一个特定的Bean,也就是说根据特定条件来控制Bean的创建行为,就可以通过这个特性来进行一些自动配置。

比如根据不同的环境类型打印出来不同的信息

(1)类实现Condition接口,这个类也就是会作为@Conditional的值传入,作为一个判断条件,返回值为boolean
public class WindowsCondition implements Condition {
    //implements method
    public boolean matches(ConditionContextcontext,AnnotatedTypeMetadata metadata) {
        return context.getEnvironment().getPropertity("os.name").contains("Windows");
    }
}


(2)业务类,用来做具体的处理
public class WindowsListService implements ListService {

    public String showCmd() {

        return "windows";

    }

}

(3)配置类
@Configuration
public class ConditionConfig {

    @Bean

    @Conditional(WindowsCondition.class)

    public ListService windowListService() {

        return new WindowsListService();

    }

}

(4)测试类
public class Main {

    public static void main(String[] args) {

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionConfig.class);

        ListService listService = context.getBean(ListService.class);

        System.out.print(listService.showCmd());

    }

}


2.@Enable*
通过开启这种注解,能够开启一些特定类的支持,从而能够做到一些自动配置。主要是在@Enable的源码中发现有@Import导入,@Import就是用来导入配置类的,如@Import(SchedulingConfiguration.class)

3.@Controller
注解在类上,这种可以用于普通页面返回,如返回return “index”这种的情况需要在类上写@Controller,那么再该类中有需要ajax请求返回的时候,就需要单独再在方法的返回值前面或者直接再方法上写@ResponseBody,表明返回的不是一个页面,而是一个reponse体

@RestController:则集合了@Controller和@ResponseBody,如一个存放Ajax的类,如果要控制返回类型,可以在@RequestMaping(produces={“application/json;charset=UTF-8”}设置produces来定制返回值的媒体类型和字符集

4.@SpringBootApplication
关键是使用了@EnableAutoConfiguration,这个里面配置了@Import注解,引入了EnableAutoConfiguraionImportSelector,这个类中通过SpringFactoriesLoader.loadFactoryName方法来扫描具有META-INF/spring.factories文件的jar包,而spring-boot-autoconfig.jar中就有个一个这个文件,次文件中声明了有哪些配置

任何一个AutonConfiguration文件,一般都有如下的条件注解:

(1)@ConditionalOnBean:当容器里面有指定的Bean条件下

(2)@ConditionalOnClass:当类路径下有指定的类的条件下


(3)@ConditionalOnProperty:指定的属性是否有执行的值

(4)@ConditionalOnResource:类路径是否有指定的值

(5)@ConditionalOnWebApplication:当前项目是Web项目的条件下

(6)@ConditionalOnMissingBean:当容器里没有指定Bean的情况下

转自:https://blog.csdn.net/uestc_lxp/article/details/52993133


分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    spring里@Conditional注解使用示例代码

    这个注解是Spring Boot的一个核心功能,使得我们可以根据环境、配置或其他自定义逻辑来决定哪些bean应该被创建。 `@Conditional`注解通常与`@Configuration`或`@Bean`注解一起使用。它的主要作用是基于某些条件来...

    第三节-springboot源码解析-王炸篇.pdf

    Spring Boot的自动装配原理涉及到Spring Boot的核心特性,它简化了基于Spring的应用开发,通过自动配置减少了大量的配置工作。 在Spring Boot中,自动装配主要依赖于一系列的Starters。这些Starters为常用的依赖...

    深度剖析Spring Boot自动装配机制实现原理(csdn)————程序.pdf

    这是因为`spring-boot-starter-data-redis`模块包含了自动配置类,这些类会根据配置条件创建并管理`RedisTemplate`。 此外,`@Import`注解还可以配合`ImportBeanDefinitionRegistrar`接口使用,它允许在运行时动态...

    SpringBoot自动配置原理.docx

    Spring Boot自动配置原理详解 Spring Boot的出现极大地简化了Java应用程序的开发流程,尤其是通过其自动配置特性,使得开发者无需繁琐的手动配置就能快速启动项目。自动配置是Spring Boot的核心功能之一,它允许...

    springboot 3.0.2 自动配置(auto-configuration) 启动器(starter)保姆级教程带源码

    自动配置是Spring Boot的一大亮点,它基于条件注解(Conditional Annotations)来自动配置你的应用。当你的类路径中有特定的jar包时,Spring Boot会尝试匹配并应用相应的配置。例如,如果检测到HSQLDB,且没有手动...

    详解如何在低版本的Spring中快速实现类似自动配置的功能

    由于Spring 4之后引入的@Conditional等条件注解是Spring Boot自动配置的关键,但在3.x版本中这些特性并不可用。然而,仍然有方法可以实现类似的效果。 首先,我们需要理解核心的诉求。比如,希望为全站添加日志记录...

    Spring Boot开发实战:基于Spring Boot的RESTful API服务的实验心得与案例解析

    Spring Boot自发布以来,以其强大的自动配置能力、简洁的开发模式以及丰富的社区支持,迅速成为了Java开发者构建微服务架构的首选框架之一。Spring Boot不仅继承了Spring框架的所有优点,还在此基础上进行了大量的...

    浅析SpringBoot自动化配置原理实现

    Spring Boot 的自动配置类通常会使用 `@Conditional` 注解,比如 `@ConditionalOnClass` 和 `@ConditionalOnBean`,这些注解用于判断类路径中是否存在某个类或某个 Bean,如果满足条件,则自动配置相应的 Bean。...

    Spring Boot技术知识点:如何读取不同路径里的applicationContext.xml配置文件2

    在实际开发中,你还需要确保XML配置中的bean与Spring Boot的自动配置不冲突,必要时可以使用`@Profile`或`@Conditional`注解来控制不同环境下的配置加载。 总结来说,Spring Boot虽然主要依赖Java和YAML配置,但...

    springBoot自动装配原理以及starter技术.pdf

    总结,Spring Boot的自动装配和starter技术大大简化了Java应用的配置,通过`@Import`注解和自动配置机制,我们可以高效地管理Bean的生命周期。理解这些原理对于优化和调试Spring Boot应用至关重要。

    springboot自定义自动装配.rar

    Spring Boot的自动配置理念是基于“约定优于配置”,它能根据项目中的依赖自动配置Bean,极大地简化了Java应用的开发。下面我们将深入探讨Spring Boot自定义自动装配的相关知识点。 一、理解自动配置 1. **自动...

    SpringBoot中必须掌握的27个注解.docx

    这意味着Spring Boot可以根据当前环境中可用的类和依赖项来自动配置Bean,大大减少了手动配置的需求。 通过以上对Spring和Spring Boot中关键注解的介绍,我们不难看出,这些注解的设计和使用极大地提高了开发效率,...

    SpringBoot-参考指南文档.pdf

    Spring Boot的自动配置功能是基于`@Conditional`注解实现的,当满足特定条件(如类存在、属性配置等)时,才会生效。如果需要禁用某个自动配置,可以在配置类上使用`@EnableAutoConfiguration(exclude = {...

    Spring Boot实现模块化的几种方法

    这篇文章主要介绍了Spring Boot实现模块化的几种方法,包括使用@ComponentScan、@Bean和@Conditional注释来创建模块,并介绍了如何使用这些模块。 模块可以是业务模块,为应用程序提供一些业务服务,或者为几个其他...

    springboot详细入门教程,适用于学习、教学使用

    ### Spring Boot 入门...Spring Boot 的特性包括自动配置、约定优于配置、依赖管理等,使得它成为构建微服务架构的理想选择。结合 Spring Cloud 和 Docker 技术,Spring Boot 能够轻松地构建、部署和管理微服务应用。

    Spring Boot整合Web项目常用功能详解

    此外,`resources/META-INF/spring.factories` 文件是 Spring Boot 自动配置的核心,它列出了所有自动配置类的全限定名,例如: ```properties org.springframework.boot.autoconfigure.EnableAutoConfiguration=\...

    autoconfig-demo:使用条件bean创建自己的自动配置文件

    本文将深入探讨Spring Boot自动配置的工作原理以及如何通过条件Bean来实现自定义配置。 首先,Spring Boot自动配置的核心在于`@EnableAutoConfiguration`注解,它告诉Spring Boot去寻找并应用相应的自动配置类。...

    如何自定义一个SpringBoot中的starter代码实例.zip

    自动配置是Spring Boot的一大特色,它通过`@EnableConfigurationProperties`和`@Conditional`注解来实现。创建一个Java类,例如`MyStarterAutoConfiguration`,并在其中定义配置属性,使用`@...

    SpringBoot中必须掌握的27个注解.pdf

    2. **@EnableAutoConfiguration**:开启自动配置,Spring Boot会根据类路径中的jar包来自动配置应用,无需手动配置大量bean。 3. **@RestController**:结合了@Controller和@ResponseBody,用于创建处理HTTP请求的...

    spring3.2源码

    Spring 3.2 是 Spring 框架的一个重要版本,它在之前的版本基础上引入了许多增强功能和优化。本文将深入探讨 Spring 3.2 ...同时,这也为学习更高级的 Spring 版本,如 Spring Boot 或 Spring Cloud 打下了坚实的基础。

Global site tag (gtag.js) - Google Analytics