spring boot之所以能够自动配置bean,是通过基于条件来配置Bean的能力实现的。
常用的条件注解如下
-
@ConditionalOnBean:当容器里存在指定的Bean的条件下
-
@ConditionalOnClass:当前类路径下存在指定的类的条件下
-
@ConditionalOnExpression:基于SpEL表达式作为判断条件
-
@ConditionalOnJava:基于JVM版本作为判断条件
-
@ConditionalOnJndi:在JNDI存在的条件下查找指定的位置
-
@ConditionalOnMissingBean:当容器里没有指定的Bean的条件下
-
@ConditionalOnMissingClass:当前类路径下没有指定的类的条件下
-
@ConditionalOnNotWebApplication:当前项目不是web项目的条件下
-
@ConditionalOnProperty:指定的属性是否有指定的值的条件下
-
@ConditionalOnResource:类路径下是否有指定的值
-
@ConditionalOnSingleCandidate:指定Bean在容器中只有一个,或者虽然有多个但是指定首选的Bean
-
@ConditionalOnWebApplication:当前项目是Web项目的条件下
这些注解都组合了@Conditional注解,只是使用了不同的条件。
接下来我们自己写一个自动配置,并且封装成starter pom。
首先创建maven工程,导入以下依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>1.3.8.RELEASE</version> </dependency>
工程结构如下
创建AuthorProperties类,作为配置信息的载体
package com.springboot.springboot_starter_hello; import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix="author")//指定配置内容的前缀 public class AuthorProperties { private static final String NAME = "微儿博客"; private static final int AGE = 18; private String name = NAME;//默认为微儿博客 private int age = AGE;//默认为18 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
创建AuthorService类,作为Bean
package com.springboot.springboot_starter_hello; public class AuthorService { private String name; private int age; public String who(){ return "name:"+name+",age:"+age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
创建配置类AuthorServiceAutoConfiguration,负责配置Bean
package com.springboot.springboot_starter_hello; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration//声明配置类 @EnableConfigurationProperties(AuthorProperties.class) @ConditionalOnClass(AuthorService.class)//类路径下存在AuthorService类的条件下 @ConditionalOnProperty(prefix="author",value="enabled",matchIfMissing=true)//在前缀为author的配置为enabled的情况下,即author=enabled,没有配置默认为enabled public class AuthorServiceAutoConfiguration { @Autowired private AuthorProperties authorProperties; @Bean @ConditionalOnMissingBean(AuthorService.class)//容器中没有AuthorService的Bean的条件下配置该Bean public AuthorService authorService(){ AuthorService authorService = new AuthorService(); authorService.setName(authorProperties.getName()); authorService.setAge(authorProperties.getAge()); return authorService; } }
若想自动配置生效,需要注册自动配置类。在src/main/resources下创建META-INF/spring.factories文件,并写入以下内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.springboot.springboot_starter_hello.AuthorServiceAutoConfiguration
若有多个自动配置类,则用","隔开,此处“\”是为了换行后仍能读到属性。
以上操作完成后执行maven install。
然后在Spring Boot项目中引入该依赖:
<dependency> <groupId>com.springboot</groupId> <artifactId>springboot-starter-hello</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
新建AutoConfig类:
package com.springboot.autoconfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.springboot.springboot_starter_hello.AuthorService; @SpringBootApplication @RestController public class AutoConfig { @Autowired private AuthorService authorService; @RequestMapping("/") public String who(){ return authorService.who(); } public static void main(String[] args) { SpringApplication.run(AutoConfig.class, args); } }
运行该类,访问localhost:8080,出现如下结果:
接下来在src/main/resources下新建application.properties文件,写入以下内容:
author.name=weare author.age=19
重新运行AutoConfig类:
原文地址:微儿博客
相关推荐
Spring Boot 自动配置机理详解 1. Spring Boot 概述 Spring Boot 是基于 Spring 框架的自动配置工具,旨在提高开发者的体验和效率。它的主要功能是自动配置 Spring 框架,降低项目搭建的复杂度。Spring Boot 并不...
**Spring Boot环境配置详解** Spring Boot是Java开发领域中的一款热门框架,它简化了Spring应用程序的初始设置和配置,使得开发者能够快速构建可运行的应用程序。在深入学习和使用Spring Boot之前,首先需要确保...
#### 二、Spring Boot自动化配置特性介绍 Spring Boot的核心特性之一就是“约定优于配置”。这意味着它提供了一种自动配置机制,能够根据项目中的依赖关系自动设置常见的配置项,从而简化开发过程。通过这种方式,...
基于条件注解(@Conditional),Spring Boot会根据类路径中的jar包和配置文件自动配置相应的bean。例如,如果类路径下存在HSQLDB数据库,那么Spring Boot就会自动配置一个内存数据库。 3. **嵌入式Web服务器...
同时讲解了Spring Boot的自动化配置、常用的注解及其实现细节。最后深入探讨了Starter启动原理、Eureka整体架构、Ribbon负载均衡器的配置和使用方法。 适合人群:对Spring Boot有一定了解的研发人员,尤其是希望深入...
使用application.properties 进行外部配置的 Spring Boot 知识点详解 Spring Boot 框架提供了多种方式来进行外部配置,今天我们将详细讲解使用 application.properties 文件来进行外部配置的方法。application....
### Spring Boot 使用 MongoDB 详解 #### 一、前言 随着大数据时代的发展,NoSQL 数据库因其灵活性和高性能成为开发者的新宠。MongoDB 作为 NoSQL 数据库中的佼佼者,凭借其面向文档的存储方式、高效查询性能及...
在Spring Boot应用中,Spring Security可以通过添加依赖自动配置。默认的安全配置可以满足基本需求,但通常需要自定义以满足特定应用的要求。 6. **Spring MVC集成**: Spring Security可以无缝集成到Spring MVC...
- **自动配置**:Spring Boot 自动配置了很多常用的组件和技术栈,如数据库连接、安全框架、邮件发送等,大大降低了开发者的工作量。 - **组件支持广泛**:对于开发者希望集成到应用中的几乎所有常用框架和技术栈,...
用户可以通过对比自己的答案来检验理解程度,巩固所学知识,包括自动配置、起步依赖、Web开发、数据访问、Actuator监控、Spring Cloud集成等内容。 2. **教学PPT**: 教学PPT通常会以清晰的图表和步骤说明Spring ...
例如,引入了`spring-boot-starter-data-jpa`,那么Spring Boot会自动配置JPA和HSQLDB数据库支持。 **5. RESTful API** 对于Web服务,Spring Boot通过`@RestController`注解创建RESTful API。`@RequestMapping`和`@...
在现代Java开发中,Spring Boot框架以其简洁性和自动化配置受到广泛欢迎。Spring Boot 2.x版本默认采用HikariCP作为其数据连接池,因为HikariCP以其高效和高性能著称。HikariCP通过使用Javassist库进行字节码操作,...
在Spring Boot项目中,我们不再需要手动编写大量的XML配置文件,而是通过自动配置类和starter模块来简化配置。对于Mybatis的整合,我们可以引入`spring-boot-starter-mybatis`依赖,这个starter模块已经包含了...
- 自动配置MyBatis,简化Spring Boot项目的集成过程。 - 提供了与Spring的无缝集成,如事务管理、Bean管理等。 通过以上内容,我们可以了解到MyBatis在Spring Boot中的具体使用方式和核心特性。结合这两个强大的...
#### 三、Spring Boot 自动配置详解 Spring Boot 通过自动配置机制简化了许多常见的配置任务,例如: - **ServerPropertiesAutoConfiguration** 和 **ServerProperties**:自动配置内嵌 Servlet 容器(如 Tomcat ...
4. **自动配置**:Spring Boot 可以根据添加到项目中的依赖自动配置 Spring 应用程序,从而避免了大量的手动配置工作。 #### 快速搭建步骤 1. **使用 Spring Initializr 创建项目**: - 打开 Spring Initializr ...
通过上述案例,可以看出 Spring Boot 在快速开发、易于部署和自动配置方面的显著优势。同时,结合 Redis 的使用,可以有效提升系统的实时性能和响应速度。在实际开发过程中,还需要注意遵循良好的编码规范和设计原则...
### Spring Boot 参考指南知识点概述 #### 一、Spring Boot 文档概览与入门 ... - **逐步替换自动配置**:提供了如何逐步替换 Spring Boot 自动配置的指南。 - **禁用自动配置**:解释了如何禁用特定的自动配置组件。
### Spring Boot环境配置详解 #### 1. 安装Java环境 Spring Boot应用需要Java环境的支持,推荐使用JDK 8及以上版本。安装Java环境后需要配置环境变量,具体步骤如下: - 下载JDK安装包。 - 安装JDK。 - 配置JAVA_...
1. **依赖管理**:Spring Boot自动提供了大量的默认配置来简化项目搭建,同时也允许通过少量的自定义配置来覆盖这些默认值。 2. **独立运行**:Spring Boot应用可以被打包成一个可执行的jar或war文件,使得部署变得...