SpringBoot 自动配置

本文介绍如何在 Spring Boot 中自定义实现自动配置,并通过条件判断来决定哪些组件会被自动装配。同时,还展示了 Spring Boot 提供的标准自动配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


我们来自定义一个Condition实现自动装配

首先创建一个接口

然后创建两个实现类

package com.gcx.spring.SpringBootAutoConfiguration;

public class GBKEncodingConvert implements EncodingConvert{

}

package com.gcx.spring.SpringBootAutoConfiguration;

public class UTF8EncodingConvert implements EncodingConvert{

}

创建一个配置类

package com.gcx.spring.SpringBootAutoConfiguration;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;

/**
 * Conditional基于条件的自动配置,一般和Condition接口配合使用他是一个数组,只有接口的都满足实现类返回true才会进行装配
 * 如果装配在方法上只会对这个方法有效,要是在类上对这个的所有方法都生效
 * @author gcx
 *
 */
@SpringBootConfiguration
@Conditional(UTF8Condition.class)
public class EncodingConvertConfig {

	@Bean
	//@Conditional(UTF8Condition.class)
	public EncodingConvert createUTF8EncodingConvert(){
		return new UTF8EncodingConvert();
	}
	
	@Bean
	//@Conditional(GBKCondition.class)
	public EncodingConvert createGBKEncodingConvert(){
		return new GBKEncodingConvert();
	}
}

创建两个子类实现Condition

package com.gcx.spring.SpringBootAutoConfiguration;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

public class UTF8Condition implements Condition{

	@Override
	public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
		String encoding=System.getProperty("file.encoding");
		if(encoding!=null){
			return "utf-8".equals(encoding.toLowerCase());
		}
		return false;
	}

}
package com.gcx.spring.SpringBootAutoConfiguration;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

public class GBKCondition implements Condition {

	@Override
	public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
		String encoding=System.getProperty("file.encoding");
		if(encoding!=null){
			return "gbk".equals(encoding.toLowerCase());
		}
		return false;
		
	}

	

}




默认的System.getProperty(“file.encoding”)是UTF-8

也可以在Argument中指定,他就会走你指定的



以上是我们自定义实现的自动配置

SpringBoot提供大量的自动配置,我们例举三个实例

创建一个UserConfiguration类·

package com.gcx.spring.SpringBootAutoConfiguration;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class UserConfiguration {
	
	@Bean
	@ConditionalOnProperty(name="runnable.enabled",havingValue="true",matchIfMissing=true)
	public Runnable createRunnable(){
		return () -> {};
	}
	
	@Bean
	@ConditionalOnClass(name="com.google.gson.Gson")
	public Runnable getGsonrunnable(){
		return () -> {};
	}
	
	@Bean
	@ConditionalOnBean(name="user")
	public Runnable getUserRunnable(){
		return () -> {};
	}
}

@ConditionalOnProprtty 某个属性等于某个值时会触发自动配置 runnable.enabled在application.properties设置true,并且havingValue="true“时会自动配置,当我们不想

在application.properties中设置为true,可以添加matchIFmissing="true" 即便是不存在这个配置(runnable.enabled)也会自动配置

@ConditionalOnClass 当这个类在classpath存在时会自动配置,不存在就不能自动配置上

@ConditionalOnBean 如果这个名字为user的这个类存在时会装配,否则不会自动装配


要是有兴趣研究在这个路径下自己尝试,这里不一一列举



以上就是有关自动配置的说明!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值