JavaWeb开发第十二天

本文详细介绍了SpringBoot中的配置文件格式选择、Bean管理(包括获取、作用域和延迟初始化)、起步依赖原理、自动配置机制以及如何扩展扫描范围。此外,还涵盖了自定义starter的配置方法和条件注解的使用。
摘要由CSDN通过智能技术生成

配置优先级

配置

  • SpringBoot中支持三种格式的配置文件(优先级):

  • 虽然springboot支持多种格式的配置文件,但是在项目开发时,推荐使用统一的格式(yml是主流)。
  • SpringBoot除了支持配置文件属性配置,还支持Java系统属性命令行参数的方式进行属性配置。

  • 优先级:

Bean管理

获取Bean

  • 默认情况下,Spring项目启动时,会把bean都创建好放在IOC容器中,如果想要主动获取这些bean,可以通过如下方式:
    • 根据name获取bean:Object getBean(String name)
    • 根据类型获取bean:<T> T getBean(Class<T> requiredType)
    • 根据name获取bean(带类型转换):<T> T getBean(String name, Class<T> requiredType)
  • 获取IOC容器对象:
@Autowired
private ApplicationContext applicationContext; //容器对象

Bean作用域

  • Spring支持五种作用域,后三种在web环境才生效:

  • 可以通过 @Scope 注解来进行配置作用域:
@Scope("prototype")
@RestController
@RequestMapping("/depts")
public class DeptController {
    ...
}

注意事项:

  • 默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)。
  • prototype的bean,每一次使用该bean的时候都会创建一个新的实例。
  • 实际开发当中,绝大部分的Bean是单例的,也就是说绝大部分Bean不需要配置scope属性。

第三方Bean

  • @Component、@Controller、@Service、@Repository
  • 如果要管理的bean对象来自于第三方(不是自定义的),是无法用 @Component 及衍生注解声明bean的,就需要用到 @Bean注解。

  • 若要管理的第三方bean对象,建议对这些bean进行集中分类配置,可以通过 @Configuration 注解声明一个配置类。

注意事项:

  • 通过@Bean注解可以使用name或value属性可以声明bean的名称,如果不指定,默认bean的名称就是方法名。
  • 如果第三方bean需要依赖其它bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配。
@Configuration
public class CommonConfig {
    @Bean
    public SAXReader saxReader(DeptController deptController){
        return new SAXReder();
    }
}

SpringBoot原理(高频面试)

起步依赖

起步依赖原理原理就是maven依赖传递

自动配置

  • SpringBoot的自动配置就是当spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。

自动配置原理:

SpringBoot默认只能扫描启动类所在包及其子包

扩大扫描范围:

  • 方案一:@ComponentScan组件扫描
@ComponentScan({"com.example", "com.itrao"}) //一旦声明这个注解,原来扫描的包会被覆盖掉,需要自行添加
@SpringBootApplication
public class TliasWebManagementApplication {
    public static void main(String[] args) {
        SpringApplication.run(TliasWebManagementApplication.class, args);
    }
}
  • 方案二:@Import 导入。使用@Import导入的类会被Spring加载到IOC容器中,导入形式主要有以下几种:
    • 导入 普通类
    • 导入 配置类
    • 导入 ImportSelector 接口实现类
    • @EnableXxxx注解,封装@Import注解

@SpringBootApplication

  •  该注解标识在SpringBoot工程引导类上,是SpringBoot中最最最重要的注解。该注解由三个部分组成:
    • @SpringBootConfiguration:该注解与 @Configuration 注解作用相同,用来声明当前也是一个配置类。
    • @ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。
    • @EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解。
      • 加载以下两个配置文件中的配置类

@Conditional

  • 作用:按照一定的条件进行判断,在满足给定条件后才会注册对应的bean对象到Spring IOC容器中。
  • 位置:方法、类
  • @Conditional 本身是一个父注解,派生出大量的子注解:
    • @ConditionalOnClass:判断环境中是否有对应字节码文件,才注册bean到IOC容器。
    • @Bean
      @ConditionalOnClass(name = "io.jsonwebtoken.Jwts") //环境中存在这个指定类,才会将该bean对象加入IOC容器中
      public HeaderParse harderparse(){
          ...
          return new HeaderParse();
      }
    • @ConditionalOnMissingBean:判断环境中没有对应的bean(类型 或 名称) ,才注册bean到IOC容器。
    • @Bean
      @ConditionalOnMissingBean //不存在该类型的Bean,才会将该Bean加入到IOC容器中 -- 指定类型(value属性)或名称(name属性)
      public HeaderParse harderparse(){
          ...
          return new HeaderParse();
      }
    • @ConditionalOnProperty:判断配置文件中有对应属性和值,才注册bean到IOC容器。

自定义starter

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值