|
@SpringBootApplication(scanBasePackages={"..."}的作用是什么?如果不指定scanBasePackages参数会怎样?@SpringBootApplication注解是一个复合注解,包含了多个Spring注解,用于简化SpringBoot应用程序的配置。它包括@Configuration、@EnableAutoConfiguration和@ComponentScan等注解。scanBasePackages属性scanBasePackages属性属于@ComponentScan注解的一部分,用于指定要扫描的基础包。通过设置scanBasePackages,你可以明确告诉Spring框架在哪些包中查找组件、配置类和服务。@SpringBootApplication(scanBasePackages={"com.example.package1","com.example.package2"})publicclassMyApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MyApplication.class,args);}}123456作用指定扫描范围:通过scanBasePackages属性,你可以指定Spring框架应该扫描哪些包,从而找到并注册这些包中的组件(如@Component、@Service、@Repository、@Controller等)。控制组件扫描:有时,你可能不希望Spring扫描默认包及其子包中的所有组件,而是希望只扫描特定的包。在这种情况下,scanBasePackages属性非常有用。如果不写scanBasePackages会怎样?如果不指定scanBasePackages属性,SpringBoot应用程序将默认扫描主应用程序类所在的包及其子包。这意味着,所有在主应用程序类所在包及其子包中的组件都会被自动扫描和注册。@SpringBootApplicationpublicclassMyApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MyApplication.class,args);}}123456在这个例子中,如果MyApplication类位于com.example包中,SpringBoot将会扫描com.example包及其所有子包。示例默认扫描假设你的项目结构如下:com.example├──MyApplication.java├──service│└──MyService.java└──controller└──MyController.java123456如果MyApplication类位于com.example包中,并且你没有指定scanBasePackages属性:@SpringBootApplicationpublicclassMyApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MyApplication.class,args);}}123456SpringBoot将会扫描com.example包及其所有子包,包括com.example.service和com.example.controller。指定扫描包如果你只希望SpringBoot扫描特定的包,可以使用scanBasePackages属性:@SpringBootApplication(scanBasePackages={"com.example.service"})publicclassMyApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MyApplication.class,args);}}123456在这个例子中,SpringBoot只会扫描com.example.service包,而不会扫描com.example.controller包。总结scanBasePackages属性:用于指定Spring框架应该扫描的基础包,从而找到并注册这些包中的组件。默认行为:如果不指定scanBasePackages属性,SpringBoot将默认扫描主应用程序类所在的包及其子包。控制扫描范围:通过scanBasePackages属性,你可以控制Spring框架的组件扫描范围,从而避免扫描不必要的包。通过合理使用scanBasePackages属性,可以优化SpringBoot应用程序的组件扫描过程,从而提高应用程序的启动速度和性能。@EnableConfigurationProperties的用法@EnableConfigurationProperties是SpringBoot中的一个注解,用于启用对@ConfigurationProperties注解的支持。它通常用于将外部配置(如application.properties或application.yml文件中的配置)绑定到Java对象中。使用步骤创建配置属性类:定义一个Java类,并使用@ConfigurationProperties注解标记该类,指定要绑定的配置前缀。启用配置属性支持:在配置类或主应用程序类上添加@EnableConfigurationProperties注解,并指定配置属性类。示例代码1.创建配置属性类首先,定义一个Java类,并使用@ConfigurationProperties注解标记该类,指定要绑定的配置前缀。importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.stereotype.Component;@Component@ConfigurationProperties(prefix="myapp")publicclassMyAppProperties{privateStringname;privateinttimeout;//GettersandSetterspublicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetTimeout(){returntimeout;}publicvoidsetTimeout(inttimeout){this.timeout=timeout;}}1234567891011121314151617181920212223242526272.在配置文件中添加配置在application.properties或application.yml文件中添加配置项。application.properties:myapp.name=MyApplicationmyapp.timeout=3012application.yml:myapp:name:MyApplicationtimeout:301233.启用配置属性支持在配置类或主应用程序类上添加@EnableConfigurationProperties注解,并指定配置属性类。importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.boot.context.properties.EnableConfigurationProperties;@SpringBootApplication@EnableConfigurationProperties(MyAppProperties.class)publicclassMyApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MyApplication.class,args);}}12345678910114.使用配置属性你可以在其他SpringBean中注入配置属性类,并使用其中的配置值。importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassMyController{@AutowiredprivateMyAppPropertiesmyAppProperties;@GetMapping("/config")publicStringgetConfig(){return"Name:"+myAppProperties.getName()+",Timeout:"+myAppProperties.getTimeout();}}123456789101112131415总结@ConfigurationProperties注解:用于定义一个Java类,并指定要绑定的配置前缀。@EnableConfigurationProperties注解:用于启用对@ConfigurationProperties注解的支持,并指定配置属性类。配置文件:在application.properties或application.yml文件中添加配置项。使用配置属性:在其他SpringBean中注入配置属性类,并使用其中的配置值。通过使用@EnableConfigurationProperties和@ConfigurationProperties注解,你可以轻松地将外部配置绑定到Java对象中,从而简化配置管理和使用。注意如果在@EnableConfigurationProperties注解中不指定具体的配置属性类(例如MyAppProperties.class),那么SpringBoot将不会自动扫描和注册这些配置属性类。这意味着,即使你定义了一个使用@ConfigurationProperties注解的类,SpringBoot也不会将外部配置绑定到这个类中。1.不指定配置属性类如果你在@EnableConfigurationProperties注解中不指定具体的配置属性类:importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.boot.context.properties.EnableConfigurationProperties;@SpringBootApplication@EnableConfigurationPropertiespublicclassMyApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MyApplication.class,args);}}1234567891011在这种情况下,SpringBoot将不会自动扫描和注册MyAppProperties类,即使它使用了@ConfigurationProperties注解。结果是,外部配置将不会被绑定到MyAppProperties类中。2.指定配置属性类如果你在@EnableConfigurationProperties注解中指定了具体的配置属性类:importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.boot.context.properties.EnableConfigurationProperties;@SpringBootApplication@EnableConfigurationProperties(MyAppProperties.class)publicclassMyApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MyApplication.class,args);}}1234567891011在这种情况下,SpringBoot将自动扫描和注册MyAppProperties类,并将外部配置绑定到这个类中。自动扫描如果你不想在@EnableConfigurationProperties注解中显式指定配置属性类,可以使用@ConfigurationPropertiesScan注解,它会自动扫描和注册所有使用@ConfigurationProperties注解的类。importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.boot.context.properties.ConfigurationPropertiesScan;@SpringBootApplication@ConfigurationPropertiesScanpublicclassMyApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MyApplication.class,args);}}1234567891011总结不指定配置属性类:如果在@EnableConfigurationProperties注解中不指定具体的配置属性类,SpringBoot将不会自动扫描和注册这些配置属性类,外部配置也不会被绑定到这些类中。指定配置属性类:在@EnableConfigurationProperties注解中指定具体的配置属性类,SpringBoot将自动扫描和注册这些类,并将外部配置绑定到这些类中。自动扫描:使用@ConfigurationPropertiesScan注解,可以自动扫描和注册所有使用@ConfigurationProperties注解的类。
|
|