栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot(三)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot(三)

文章目录
    • Spring Boot Devtools 工具
    • @SpringBootApplication 注解
    • @SpringBootConfiguration 注解
    • @EnableAutoConfiguration 注解
    • @Configuration 注解
    • @PropertySource 注解
    • 在` bean` 和 @Value 注解中解析 $ {...} 占位符
    • 使用 @PropertySource 覆盖属性的说明

Spring Boot Devtools 工具
  1. spring-boot-devtools 模块可以包含到到任何模块中,以提供开发调试特性,只需简单的将该模块的依赖添加到 POM 中:

     
         
            org.springframework.boot 
            spring-boot-devtools 
            true 
         
    
    
  2. 在运行一个完整的应用时(正式打包)开发者工具(spring-boot-devtools)会被自动禁用。

  3. 确保 spring-boot-devtools 绝对不会包含在一个产品级构建中,可以使用 excludeDevtools 构建属性彻底移除该 jar,Maven 和 Gradle 都支持该属性

    
        org.springframework.boot
        spring-boot-maven-plugin
        
            true
            true
        
    
    
@SpringBootApplication 注解
  1. @SpringBootApplication 注解是 Spring Boot 最核心、最基础的注解
  2. @SpringBootApplication 注解表示一个配置类,该类声明一个或多个 @Bean 方法,并且还触发自动配置和组件扫描
  3. @SpringBootApplication 注解等效于声明 @Configuration,@EnableAutoConfiguration 和 @ComponentScan 三个注解
    1. @Configuration注解表示一个类声明了一个或多个 @Bean 方法,并且可以由 Spring 容器进行处理,以在运行时为这些 bean 生成 bean 定义和服务请求
      @Configuration
       public class AppConfig {
           @Bean
           public MyBean myBean() {
               // 实例化,配置并返回Bean ...
           }
       }
      
    2. @EnableAutoConfiguration启用Spring Application Context的自动配置,尝试猜测和配置可能需要的bean,通常根据类路径和定义的 bean 来应用自动配置类
    3. @ComponentScan配置组件扫描指令以与 @Configuration 类一起使用。 提供与 Spring XML 元素并行的支持
    4. @ComponentScan可以指定 basePackageClasses() 或 basePackages()(或其别名 value())来定义要扫描的特定程序包。如果未定义特定的程序包,则将从声明此批注的类的程序包中进行扫描
@SpringBootConfiguration 注解
  1. SpringBootConfiguration 是 SpringBoot 项目的配置注解,这也是一个组合注解
  2. SpringBootConfiguration 注解可以用 java 代码的形式实现 Spring 中 xml 配置文件配置的效果,并会将当前类内声明的一个或多个以 @Bean 注解标记的方法的实例纳入到 spring 容器中,并且实例名就是方法名
  3. SpringBootConfiguration 可以作为 Spring 标准中 @Configuration 注解的替代
  4. SpringBoot 项目中推荐使用@SpringBootConfiguration 替代 @Configuration。
  5. @SpringBootConfiguration 注解的proxyBeanMethods属性
    1. proxyBeanMethods属性用来指定是否应该代理 @Bean 方法以强制执行 bean 生命周期行为
    2. proxyBeanMethods属性默认为 true,它允许在配置类中进行 “bean间引用”,以及对该配置的 @Bean 方法的外部调用
@EnableAutoConfiguration 注解
  1. @EnableAutoConfiguration 注解表示开启自动配置功能,是实现自动化配置的注解
  2. Spring 框架将试图猜测和配置可能需要的 bean,通常根据您的类路径和定义的 bean 来应用自动配置类,
  3. 当使用 @SpringBootApplication 时,会自动启用上下文的自动配置,因此添加该注释不会产生额外的效果。
  4. 自动配置会尝试尽可能智能化,并且在自定义配置时会自动退出。也可以手动 exclude() 不想应用的配置(如果没有访问权限,可以使用 excludeName())可以通过 spring.autofigre.exit 属性将它们排除在外
  5. 可以通过 spring.autofigre.exit 属性将它们排除在外
  6. 带有 @EnableAutoConfiguration 注释的类的包(通常通过 @SpringBootApplication)具有特殊的意义,通常用作 “default”。
  7. @EnableAutoConfiguration 注解也是一个组合注解
    1. exclude():排除特定的自动配置类,使它们永远不会被应用.
    2. excludeName():排除特定的自动配置类名,使它们永远不会被应用.
  8. 通常情况下,不需要显示使用 @EnableAutoConfiguration 注解。因为在 @SpringBootApplication 注解上面声明了 @EnableAutoConfiguration 注解
@Configuration 注解
  1. @Configuration 注解表示一个类声明了一个或多个拥有 @Bean注解的方法,并且这些拥有 @Bean的方法的返回对象将被 Spring 容器管理,在其他类中就可以使用 @Autowired注解注入这些 Bean

    @Configuration
    public class AppConfig {
        @Bean
        public MyBean myBean() {
            // instantiate, configure and return bean ...
        }
    }
    
  2. 对应到传统 Spring XML 配置如下

    
    
  3. 通过Spring XML 实现@Configuration 注解,可以将 @Configuration 类声明为 Spring XML 文件中的常规定义:

    
       
       
    
    
  4. 需要 才能启用 ConfigurationClassPostProcessor 和其他与注释相关的后处理器,这些处理器有助于处理 @Configuration 类

通过组件扫描

  1. @Configuration 类是组件扫描的候选对象(通常使用Spring XML的 元素)因此也可以像使用任何普通的 @Component 一样利用 @ Autowired / @ Inject 注解注入

  2. 如果存在单个构造函数,则自动为该构造函数自动应用语义;

    @Configuration
    public class AppConfig {
        private final SomeBean someBean;
     
        public AppConfig(SomeBean someBean) {
            this.someBean = someBean;
        }
        // @Bean definition using "SomeBean"
    }
    
@PropertySource 注解
  1. @PropertySource 注解提供了一种方便的声明性机制,用于将 PropertySource 添加到 Spring 的 Environment 中,与 @Configuration 类一起使用

  2. 可以使用 @Value 去引用定义的属性,例如:@Value(“testbean.name”);

  3. 可以指定默认值,如:@Value(“testbean.name:defaultValue”)

  4. 给定一个包含键/值对 testbean.name=myTestBean 的文件 app.properties

  5. @Configuration 类使用 @PropertySource 将 app.properties 设置给 Environment 的 PropertySources 集合

    @Configuration
    @PropertySource("classpath:/com/myco/app.properties")
    public class AppConfig {
     
        @Autowired
        Environment env;
     
        @Bean
        public TestBean testBean() {
            TestBean testBean = new TestBean();
            testBean.setName(env.getProperty("testbean.name"));
            return testBean;
        }
    }
    
  6. 使用 @Autowired 将 Environment 对象注入到配置类中,然后在 testBean() 方法中使用

在bean 和 @Value 注解中解析 $ {…} 占位符
  1. @PropertySource 资源中存在的任何 ${…} 占位符都将根据已在环境中注册的属性源集进行解析

    @Configuration
    @PropertySource("classpath:/com/${my.placeholder:default/path}/app.properties")
    public class AppConfig {
     
         @Autowired
         Environment env;
     
         @Bean
         public TestBean testBean() {
             TestBean testBean = new TestBean();
             testBean.setName(env.getProperty("testbean.name"));
             return testBean;
         }
    }
    
  2. 假如“my.placeholder”属性已存在于已注册的属性源之中(例如,系统属性或环境变量),则占位符将解析为相应的值。如果不是,那么将使用“默认值/路径”作为默认值

  3. 在属性后面使用冒号“:”指定默认值,例如:“my.placeholder:defaultValue”(注意:默认值是可选的)。 如果未指定默认值并且无法解析属性,则将抛出 IllegalArgumentException。

使用 @PropertySource 覆盖属性的说明
  1. 例如,给定两个属性文件 a.properties 和 b.properties,请考虑以下两个配置类,它们使用 @PropertySource 注解来引用它们

    @Configuration
     @PropertySource("classpath:/com/myco/a.properties")
     public class ConfigA { }
     
     @Configuration
     @PropertySource("classpath:/com/myco/b.properties")
     public class ConfigB { }
    
  2. 覆盖顺序取决于在应用程序上下文中注册这些类的顺序

    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
     ctx.register(ConfigA.class);
     ctx.register(ConfigB.class);
     ctx.refresh();
    
  3. 因为 ConfigB 是最后注册的,所以 b.properties 中的属性将覆盖 a.properties 中存在的所有重复项。

  4. 使用 @PropertySource 注解严格控制属性源的顺序可能是不可行的。例如,如果上面的 @Configuration 类是通过组件扫描注册的,则顺序很难预测

  5. 根据 Java8 的约定,@PropertySource 注解可以重复。但是,所有此类 @PropertySource 注解都需要在同一级别上声明:直接在配置类上声明,或者在同一自定义注解上作为元注解声明。不建议将直接注解和元注解混合使用,因为直接注解将有效覆盖元注解

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/601479.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号