`
嚣张把刀
  • 浏览: 9447 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Spring Boot自动配置详解

阅读更多

spring boot之所以能够自动配置bean,是通过基于条件来配置Bean的能力实现的。

常用的条件注解如下

  1. @ConditionalOnBean:当容器里存在指定的Bean的条件下

  2. @ConditionalOnClass:当前类路径下存在指定的类的条件下

  3. @ConditionalOnExpression:基于SpEL表达式作为判断条件

  4. @ConditionalOnJava:基于JVM版本作为判断条件

  5. @ConditionalOnJndi:在JNDI存在的条件下查找指定的位置

  6. @ConditionalOnMissingBean:当容器里没有指定的Bean的条件下

  7. @ConditionalOnMissingClass:当前类路径下没有指定的类的条件下

  8. @ConditionalOnNotWebApplication:当前项目不是web项目的条件下

  9. @ConditionalOnProperty:指定的属性是否有指定的值的条件下

  10. @ConditionalOnResource:类路径下是否有指定的值

  11. @ConditionalOnSingleCandidate:指定Bean在容器中只有一个,或者虽然有多个但是指定首选的Bean

  12. @ConditionalOnWebApplication:当前项目是Web项目的条件下

这些注解都组合了@Conditional注解,只是使用了不同的条件。

接下来我们自己写一个自动配置,并且封装成starter pom。

首先创建maven工程,导入以下依赖:

 

<dependency>
   <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
   <version>1.3.8.RELEASE</version>
</dependency>

 

工程结构如下

jiegou.png

创建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,出现如下结果:

123.png

接下来在src/main/resources下新建application.properties文件,写入以下内容:

 

author.name=weare
author.age=19

 

重新运行AutoConfig类:

123.png

 

原文地址:微儿博客

分享到:
评论

相关推荐

    Spring Boot 的自动配置,到底是怎么做到?.docx

    Spring Boot 自动配置机理详解 1. Spring Boot 概述 Spring Boot 是基于 Spring 框架的自动配置工具,旨在提高开发者的体验和效率。它的主要功能是自动配置 Spring 框架,降低项目搭建的复杂度。Spring Boot 并不...

    Spring Boot环境配置

    **Spring Boot环境配置详解** Spring Boot是Java开发领域中的一款热门框架,它简化了Spring应用程序的初始设置和配置,使得开发者能够快速构建可运行的应用程序。在深入学习和使用Spring Boot之前,首先需要确保...

    Spring Boot的自动化配置实现swagger2引入spring boot生成API文档.docx

    #### 二、Spring Boot自动化配置特性介绍 Spring Boot的核心特性之一就是“约定优于配置”。这意味着它提供了一种自动配置机制,能够根据项目中的依赖关系自动设置常见的配置项,从而简化开发过程。通过这种方式,...

    Spring Boot核心技术-笔记-pdf版.pdf

    基于条件注解(@Conditional),Spring Boot会根据类路径中的jar包和配置文件自动配置相应的bean。例如,如果类路径下存在HSQLDB数据库,那么Spring Boot就会自动配置一个内存数据库。 3. **嵌入式Web服务器...

    详解spring boot 使用application.properties 进行外部配置

    使用application.properties 进行外部配置的 Spring Boot 知识点详解 Spring Boot 框架提供了多种方式来进行外部配置,今天我们将详细讲解使用 application.properties 文件来进行外部配置的方法。application....

    Spring Boot使用MongoDB详解

    ### Spring Boot 使用 MongoDB 详解 #### 一、前言 随着大数据时代的发展,NoSQL 数据库因其灵活性和高性能成为开发者的新宠。MongoDB 作为 NoSQL 数据库中的佼佼者,凭借其面向文档的存储方式、高效查询性能及...

    springsecurity使用配置详解

    在Spring Boot应用中,Spring Security可以通过添加依赖自动配置。默认的安全配置可以满足基本需求,但通常需要自定义以满足特定应用的要求。 6. **Spring MVC集成**: Spring Security可以无缝集成到Spring MVC...

    Spring cloud和Spring boot介绍

    - **自动配置**:Spring Boot 自动配置了很多常用的组件和技术栈,如数据库连接、安全框架、邮件发送等,大大降低了开发者的工作量。 - **组件支持广泛**:对于开发者希望集成到应用中的几乎所有常用框架和技术栈,...

    Spring Boot如何使用HikariCP连接池详解

    在现代Java开发中,Spring Boot框架以其简洁性和自动化配置受到广泛欢迎。Spring Boot 2.x版本默认采用HikariCP作为其数据连接池,因为HikariCP以其高效和高性能著称。HikariCP通过使用Javassist库进行字节码操作,...

    spring boot入门的第一个项目

    例如,引入了`spring-boot-starter-data-jpa`,那么Spring Boot会自动配置JPA和HSQLDB数据库支持。 **5. RESTful API** 对于Web服务,Spring Boot通过`@RestController`注解创建RESTful API。`@RequestMapping`和`@...

    Spring-Boot-Demo

    在Spring Boot项目中,我们不再需要手动编写大量的XML配置文件,而是通过自动配置类和starter模块来简化配置。对于Mybatis的整合,我们可以引入`spring-boot-starter-mybatis`依赖,这个starter模块已经包含了...

    Spring Boot Mybatis使用详解含示例(值得珍藏)

    - 自动配置MyBatis,简化Spring Boot项目的集成过程。 - 提供了与Spring的无缝集成,如事务管理、Bean管理等。 通过以上内容,我们可以了解到MyBatis在Spring Boot中的具体使用方式和核心特性。结合这两个强大的...

    sprngboot基本信息ppt

    #### 三、Spring Boot 自动配置详解 Spring Boot 通过自动配置机制简化了许多常见的配置任务,例如: - **ServerPropertiesAutoConfiguration** 和 **ServerProperties**:自动配置内嵌 Servlet 容器(如 Tomcat ...

    spring boot入门教程

    4. **自动配置**:Spring Boot 可以根据添加到项目中的依赖自动配置 Spring 应用程序,从而避免了大量的手动配置工作。 #### 快速搭建步骤 1. **使用 Spring Initializr 创建项目**: - 打开 Spring Initializr ...

    Spring Boot开发案例详解.pdf

    通过上述案例,可以看出 Spring Boot 在快速开发、易于部署和自动配置方面的显著优势。同时,结合 Redis 的使用,可以有效提升系统的实时性能和响应速度。在实际开发过程中,还需要注意遵循良好的编码规范和设计原则...

    spring-boot-reference

    ### Spring Boot 参考指南知识点概述 #### 一、Spring Boot 文档概览与入门 ... - **逐步替换自动配置**:提供了如何逐步替换 Spring Boot 自动配置的指南。 - **禁用自动配置**:解释了如何禁用特定的自动配置组件。

    Spring Boot笔记

    ### Spring Boot环境配置详解 #### 1. 安装Java环境 Spring Boot应用需要Java环境的支持,推荐使用JDK 8及以上版本。安装Java环境后需要配置环境变量,具体步骤如下: - 下载JDK安装包。 - 安装JDK。 - 配置JAVA_...

    spring boot

    1. **依赖管理**:Spring Boot自动提供了大量的默认配置来简化项目搭建,同时也允许通过少量的自定义配置来覆盖这些默认值。 2. **独立运行**:Spring Boot应用可以被打包成一个可执行的jar或war文件,使得部署变得...

    从零开始学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 ...

    Spring boot中@Conditional和spring boot的自动配置实例详解

    "Spring Boot 中 @Conditional 和 Spring Boot 的自动配置实例详解" Spring Boot 中的自动配置是指根据不同的情况来决定 Spring 配置应该用哪个,不应该用哪个。这种机制可以让开发者更方便地进行开发和配置。在 ...

Global site tag (gtag.js) - Google Analytics