• Spring Boot笔记 #03# Developing with Spring Boot


    译自:https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using

    4. Auto-configuration

    Spring Boot auto-configuration尝试根据添加的jar依赖项自动配置Spring应用程序。例如,如果HSQLDB在类路径上,并且您没有手动配置任何数据库连接bean,那么Spring Boot将自动配置内存中的数据库。

    您需要通过在@Configuration类中添加@EnableAutoConfiguration或@SpringBootApplication注解来启用自动配置。

    您应该只添加一个@SpringBootApplication或@EnableAutoConfiguration注解。我们通常建议您只将其中一个添加到主@Configuration类中。

    4.1. Gradually Replacing Auto-configuration

    auto-configuration是非侵入性的(non-invasive)。在任何时候,您都可以开始定义自己的配置来替换auto-configuration的特定部分。例如,如果您添加自己的DataSource bean,默认的嵌入式数据库支持就会后退(backs away)。

    如果您需要了解当前应用的auto-configuration以及原因,请使用--debug模式(the --debug switch)启动应用程序。这样做可以为选定的核心记录器启用调试日志,并将条件报告记录到控制台。这样做可以为选定的核心记录器启用调试日志,并将条件报告记录到控制台。

    4.2. Disabling Specific Auto-configuration Classes

    如果你发现某个你不想要的自动配置类正在被应用,你可以使用@SpringBootApplication的exclude属性来禁用它们,如下所示:

    @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
    public class MyApplication {
    
    }

    5. Spring Beans and Dependency Injection

    您可以自由地使用任何标准Spring Framework技术来定义bean及其注入的依赖项。我们通常建议使用构造函数注入来连接依赖和@ComponentScan来查找bean。

    如果您按照上面建议的方式构造代码(将应用程序类定位在顶级包中),您可以不带任何参数添加@ComponentScan或使用隐式包含它的@SpringBootApplication注释。您的所有应用程序组件(@Component、@Service、@Repository、@Controller,以及其他)都自动注册为Spring bean。

    下面的例子展示了一个@Service Bean,它使用构造函数注入来获得一个所需的RiskAssessor Bean:

    import org.springframework.stereotype.Service;
    
    @Service
    public class MyAccountService implements AccountService {
    
        private final RiskAssessor riskAssessor;
    
        public MyAccountService(RiskAssessor riskAssessor) {
            this.riskAssessor = riskAssessor;
        }
    
        // ...
    
    }

    如果一个bean有多个构造函数,你需要用@Autowired标记你想让Spring使用的构造函数:

    import java.io.PrintStream;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class MyAccountService implements AccountService {
    
        private final RiskAssessor riskAssessor;
    
        private final PrintStream out;
    
        @Autowired
        public MyAccountService(RiskAssessor riskAssessor) {
            this.riskAssessor = riskAssessor;
            this.out = System.out;
        }
    
        public MyAccountService(RiskAssessor riskAssessor, PrintStream out) {
            this.riskAssessor = riskAssessor;
            this.out = out;
        }
    
        // ...
    
    }

    6. Using the @SpringBootApplication Annotation

    许多Spring Boot开发者喜欢他们的应用使用自动配置(auto-configuration)、组件扫描(component scan),并且能够在他们的“应用类(application class)”上定义额外的配置(configuration)。一个@SpringBootApplication注释可以用来启用这三个特性,即:

    • @EnableAutoConfiguration:启用Spring Boot的自动配置机制(Spring Boot’s auto-configuration mechanism
    • @ComponentScan:在应用程序所在的包上启用@Component scan(参见the best practices
    • @SpringBootConfiguration:允许在上下文中注册额外的bean,或者导入额外的配置类。Spring标准@Configuration的替代方案,它可以帮助集成测试中的配置检测(configuration detection)。
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    // Same as @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
    @SpringBootApplication
    public class MyApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    
    }

    这些特性都不是强制性的,您可以选择用它启用的任何特性来替换这个单一的注释。例如,你可能不想在你的应用程序中使用组件扫描(component scan)或配置属性扫描(configuration properties scan):

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.SpringBootConfiguration;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.context.annotation.Import;
    
    @SpringBootConfiguration(proxyBeanMethods = false)
    @EnableAutoConfiguration
    @Import({ SomeConfiguration.class, AnotherConfiguration.class })
    public class MyApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    
    }

    在这个例子中,MyApplication和其他任何Spring Boot应用程序一样,除了带@Component注释的类和带@ConfigurationProperties注释的类不会自动检测到,用户定义的bean会显式导入(参见@Import)。

    10. What to Read Next

    现在,您应该了解如何使用Spring Boot以及应该遵循的一些最佳实践。现在,您可以继续深入了解Spring Boot的特定特性(specific Spring Boot features ),或者跳过它,阅读Spring Boot的“生产准备(production ready)”方面的内容。

  • 相关阅读:
    获取汉字信息(结合正则就可以得到想要的详细啦)
    压缩图片(递归结合pillow)通过改变图片尺寸实现;tinify 需要付费
    实现两个视频同时播放,利用到opencv模块 (线程进程开启)
    切换pip下载源头
    516. 最长回文子序列
    87.扰乱字符串
    Maximum Likelihood ML
    数组右边第一个比当前元素大的数
    4. 寻找两个正序数组的中位数
    min-hash
  • 原文地址:https://www.cnblogs.com/xkxf/p/15853932.html
Copyright © 2020-2023  润新知