SpringBoot笔记(2)

SpringBoot笔记(2)

一、容器功能

1.1 组件添加

1. @Configuration

  1. Full模式:获取对象时,首先在容器内搜索是否存在,如存在直接拿出
  • 默认为Full模式,单例
  • 配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式
@Configuration(proxyBeanMethods = true)
  1. Lite模式:获取对象时,直接创建新对象
  • 多例
  • 配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
@Configuration(proxyBeanMethods = false)

配置类编写

  • @Configuration
  • @Bean
//告诉SpringBoot这是一个配置类
@Configuration
public class MyConfig {
    @Bean
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        zhangsan.setPet(pet01());
        return zhangsan;
    }
    @Bean
    public Pet pet01(){
        Pet tom = new Pet("tom");
        return tom;
    }
}

2. @Bean、@Component、@Controller、@Service、@Repository

3. @ComponentScan、@Import

@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
}

给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名

4. @Conditional

条件装配:满足Conditional指定的条件,则进行组件注入

由于User依赖Pet,所以当pet组件不存在时,user组件也没有意义,所以使用条件装配@ConditionalOnBean

//存在pet01组件则进行组件注入
@ConditionalOnBean(name = "pet01")
@Bean
public User user01(){
    User zhangsan = new User("zhangsan", 18);
    zhangsan.setPet(pet01());
    return zhangsan;
}

1.2 原生配置文件引入

1. @ImportResource

作用:已经在xml中配置了组件,让配置文件中的内容生效

@ImportResource("classpath:beans.xml")
public class MyConfig {}

1.3 配置绑定@ConfigurationProperties

类似于jdbc的xml中数据绑定,可以使用@ConfigurationProperties

方法一:@EnableConfigurationProperties + @ConfigurationProperties

步骤:

  1. 在MyConfig中添加@EnableConfigurationProperties
@EnableConfigurationProperties(Car.class)
//1、开启Car配置绑定功能
//2、把这个Car这个组件自动注册到容器中
public class MyConfig {
}
  1. 在pojo的实体类上添加@ConfigurationProperties
mycar.name=BYD
mycar.price=1000

​ prefix表示xml文件中的前缀

@ConfigurationProperties(prefix = "mycar")
public class Car {

方法二:@Component + @ConfigurationProperties

@Component
@ConfigurationProperties(prefix = "mycar")
public class Car {

二、自动配置原理入门

2.1 引导加载自动配置类(注解)

@SpringBootApplication = @SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan

1. @SpringBootConfiguration

@Configuration。代表当前是一个配置类

2. @ComponentScan

指定扫描哪些,Spring注解;

3. @EnableAutoConfiguration

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {}
  • @AutoConfigurationPackage:

    ​ 自动配置包?指定了默认的包规则

  • @Import(AutoConfigurationImportSelector.class)

    1、利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件
    2、调用List

    configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类

    3、利用工厂加载 Map<String, List

    > loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件

    4、从
    META-INF/spring.factories位置来加载一个文件

    默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件

    spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories

文件里面写死了spring-boot一启动就要给容器中加载的所有配置类

2.2 按需开启自动配置项

虽然127个自动配置启动时都加载了(xxxAutoConfiguration),但会按照条件装配规则@Conditional,进行按需装配

2.3 修改用户的配置

给容器中加入了文件上传解析器;

@Bean
@ConditionalOnBean(MultipartResolver.class)  //容器中有这个类型组件
@ConditionalOnMissingBean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) //容器中没有这个名字 multipartResolver 的组件
public MultipartResolver multipartResolver(MultipartResolver resolver) {
//给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找。
//SpringMVC multipartResolver。防止有些用户配置的文件上传解析器不符合规范
// Detect if the user has created a MultipartResolver but named it incorrectly
return resolver;
}

将用户的不规范的命名进行重命名

2.4 总结

  • SpringBoot首先会加载所有的自动配置类
  • 每个自动配置类按条件进行生效
  • 大多数自动配置类默认会绑定配置文件
  • 生效的配置类就会给容器中装配很多组件
  • SpringBoot默认会在底层配好所有的组件。但是如果用户自己配置了以用户的优先

顺序:

首先加载自动配置类——>按条件生效的自动配置类—–>寻找配置文件——->根据配置文件的数据为容器添加组件(用户优先)

  • 定制化配置

    • 用户直接自己@Bean替换底层的组件(用户优先)
    • 用户去看这个组件是获取的配置文件什么值就去修改。(修改配置文件)

三、最佳应用

四、开发小技巧

4.1 lombok

==================导入依赖===============
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
  1. 简化javaBean开发
=================添加注解=================
@NoArgsConstructor//无参构造
@AllArgsConstructor//全参数构造
@Data//引入get,set,toString方法
public class User {
    private String name;
    private int age;
    private Pet pet;
}
  1. 简化日志开发
@Slf4j
public class HelloController {
    @RequestMa

4.2 dev-tools

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

项目或者页面修改以后:Ctrl+F9;

4.3 Spring Initailizr(项目初始化向导)

<span>SpringBoot笔记(2)</span>

会自动进行依赖导入,自动创建项目结构,自动配好主配置类

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115190.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux文件共享 samba_文件共享服务

    linux文件共享 samba_文件共享服务Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成;SMB(ServerMessagesBlock,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务;SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统,

    2022年9月24日
    2
  • idea查看接口的实现类快捷键_idea查看方法在哪里被调用快捷键

    idea查看接口的实现类快捷键_idea查看方法在哪里被调用快捷键Ctrl+B快速打开光标处的类或方法Ctrl+Alt+B查看接口的实现类Ctrl+Shift+B跳转到类型声明处

    2022年8月15日
    9
  • 为什么贝叶斯是量化工作者最常用的工具

    为什么贝叶斯是量化工作者最常用的工具▌浅谈贝叶斯不论是学习概率统计还是机器学习的过程中,贝叶斯总是是绕不过去的一道坎,大部分人在学习的时候都是在强行地背公式和套用方法,没有真正去理解其牛逼的思想内涵。我看了一下Chalmers一些涉及到贝叶斯统计的课程,content里的第一条都是PhilosophyofBayesianstatistics。▌历史背景什么事都要从头说起,贝叶斯全名为托马斯…

    2022年5月22日
    40
  • leetcode 接雨水2_leetcode会议室

    leetcode 接雨水2_leetcode会议室题目链接给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9 提示:n == height.length0 <= n &lt

    2022年8月8日
    5
  • map:根据 value 找 key ?

    map:根据 value 找 key ?在之前的学习中,我们在使用map的时候,都是利用key找value。之前我们使用的函数是find,若存在,返回查找到的指向第一个key的迭代器,若不存在,返回尾后迭代器。反过头来想一想,我们可不可以根据value找key呢?答案是肯定的。我们使用find_if+lambda可以实现。返回值和find一致。实例1:std::strings="c";autofin…

    2022年7月23日
    14
  • 缺陷管理工具-QC篇「建议收藏」

    缺陷管理工具-QC篇「建议收藏」缺陷管理工具-QC篇一、QC介绍:QC的全称Qualitycenter,质量中心的意思,它是一款缺陷管理工具,可以组织和管理一个项目所有的测试阶段,如:从需求-用例编写-用例执行-提交缺陷-回归测试等。QC的背景:原属于Mercury公司,这是一家软件测试工具开发商,除了研发了QC之外,比较出名的工具有:LoadRunner—-性能测试工具,QTP—-自动化测试工具。后来M…

    2025年7月23日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号