前言
随笔记录下学习过程中遇到的一些问题和解决方法,主要目的梳理自己的思路和方便自己日后回顾,写的可能不是很严谨和细致。
一、SpringBoot自动装配--@Autowired
1.基础概念
IOC容器 -----负责对象的创建、初始化等一系列工作,主要作用--->管理Bean,工程中需要进行 @Autowired的都应该存放到这里
Bean ----被IOC容器所有创建或管理的对象
2.执行流程(简易)
(1)扫描依赖模块中META-INF/spring.factories,解析文件,找出装配类
(2)执行装配类,将@Bean注解的方法,注册到IOC容器
(3)在目标工程中注入对象(@Autowired)
二、通过Properties抽取公共属性配置
1.相关注解
@Data --->通常使用在实体Bean上,具有@Getter、@Setter、@ToString、 @EqualsAndHashCod 、@RequiredArgsConstructor的作用 @EnableConfigurationProperties --->将带有 @ConfigurationProperties 注解的类(没有注解@Component)注册到容器,转化为bean对象使用 @ConfigurationProperties ---> 将配置文件(yml、properties)中的文件属性,映射成一个对象
2.实现步骤
(1)定义Propertis对象;通过@ConfigurationProperties(prefix = "xxx.xxx")和配置文件(yml、properties进行映射)
代码如下(示例):注意属性名称的对应
tanhua:
sms:
singName: 大喵的博客
templateCode: xxxxx
accessKey: xxxxx
secret: xxxxx
@Data
@ConfigurationProperties(prefix = "tanhua.sms")
public class SmsProperties {
public String singName;
public String templateCode;
public String accessKey;
public String secret;
}
(2)以构造方法将xxxxProperties传入要使用的对象中
private SmsProperties smsProperties;
public SmsTemplate(SmsProperties smsProperties){
this.smsProperties = smsProperties;
}
public class TanhuaAutoConfiguration {
@Bean
public SmsTemplate smsTemplate (SmsProperties smsProperties){
return new SmsTemplate(smsProperties);
}
}
(3)在自动装配类上添加@EnableConfigurationProperties使Properties对象生效
@EnableConfigurationProperties({
SmsProperties.class
})
public class TanhuaAutoConfiguration {
@Bean
public SmsTemplate smsTemplate (SmsProperties smsProperties){
return new SmsTemplate(smsProperties);
}
}
三、踩坑点:SpringBoot 和 <artifactId>fastdfs-client</artifactId> 依赖冲突
版本信息:
SpringBoot - 2.3.9.RELEASE
fastdfs-client - 1.26.7
触发场景:运行一个@SpringBootTest注解类的方法
提示信息:爆红了很长一串,总结来说就是依赖冲突
解决方案:exclusion
<dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.26.7</version> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </exclusion> </exclusions> </dependency>
目前尚不知这样解决对后续开发有什么影响,但是项目能启动~~~✿✿ヽ(°▽°)ノ✿ ,特喵的这个坑我踩了几个小时!!!!!