给公司做网站 图片倾权,网站建设与开发要学什么专业,重庆h5网站建设模板,大连全员核酸检测越来越方便了 java技术生态发展近25年#xff0c;框架也越来越方便使用了#xff0c;简直so easy#xff01;#xff01;#xff01;我就以Spring衍生出的Spring boot做演示#xff0c;Spring boot会让你开发应用更快速。
快速启动spring boot 请参照官网 Spring | Quic… 越来越方便了 java技术生态发展近25年框架也越来越方便使用了简直so easy我就以Spring衍生出的Spring boot做演示Spring boot会让你开发应用更快速。
快速启动spring boot 请参照官网 Spring | Quickstart
代码如下
SpringBootApplication
RestController
public class SpringBootTestApplication {public static void main(String[] args) {SpringApplication.run(SpringBootTestApplication.class, args);}GetMapping(/hello)public String hello(RequestParam(value name, defaultValue World) String name) {return String.format(Hello %s!, name);}
}
注maven的pom文件 部分 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-tomcat/artifactIdscopeprovided/scope
/dependency
运行
通过浏览器方法http://localhost:8080/hello 至此一个简单的spring boot应用开发完毕要是公司企业的展示性网站用这种方式极快。
我们重点关注一下这个SpringBootApplication注解就是因为它程序运行主类相当于跑了一个tomcat中间件既然能通过web访问说明是一个web应用程序。
Target(ElementType.TYPE)
Retention(RetentionPolicy.RUNTIME)
Documented
Inherited
SpringBootConfiguration
EnableAutoConfiguration
ComponentScan(excludeFilters { Filter(type FilterType.CUSTOM, classes TypeExcludeFilter.class),Filter(type FilterType.CUSTOM, classes AutoConfigurationExcludeFilter.class) })
public interface SpringBootApplication {
/*** Exclude specific auto-configuration classes such that they will never be applied.* return the classes to exclude*/AliasFor(annotation EnableAutoConfiguration.class)Class?[] exclude() default {};/*** Exclude specific auto-configuration class names such that they will never be* applied.* return the class names to exclude* since 1.3.0*/AliasFor(annotation EnableAutoConfiguration.class)String[] excludeName() default {};/*** Base packages to scan for annotated components. Use {link #scanBasePackageClasses}* for a type-safe alternative to String-based package names.* p* strongNote:/strong this setting is an alias for* {link ComponentScan ComponentScan} only. It has no effect on {code Entity}* scanning or Spring Data {link Repository} scanning. For those you should add* {link org.springframework.boot.autoconfigure.domain.EntityScan EntityScan} and* {code Enable...Repositories} annotations.* return base packages to scan* since 1.3.0*/AliasFor(annotation ComponentScan.class, attribute basePackages)String[] scanBasePackages() default {};/*** Type-safe alternative to {link #scanBasePackages} for specifying the packages to* scan for annotated components. The package of each class specified will be scanned.* p* Consider creating a special no-op marker class or interface in each package that* serves no purpose other than being referenced by this attribute.* p* strongNote:/strong this setting is an alias for* {link ComponentScan ComponentScan} only. It has no effect on {code Entity}* scanning or Spring Data {link Repository} scanning. For those you should add* {link org.springframework.boot.autoconfigure.domain.EntityScan EntityScan} and* {code Enable...Repositories} annotations.* return base packages to scan* since 1.3.0*/AliasFor(annotation ComponentScan.class, attribute basePackageClasses)Class?[] scanBasePackageClasses() default {};......略了
}
发现SpringBootApplication注解是一个组合型注解有3个Spring annotationsSpringBootConfiguration, ComponentScan, and EnableAutoConfiguration 记住EnableAutoConfiguration注解很重要其次ComponentScan注解。 EnableAutoConfiguration注解spring boot 会基于classpath路径的jar、注解和配置信息会自动配置我们的应用程序所有的这些注解会帮助spring boot 自动配置我们的应用程序我们不必担心配置它们。我演示的代码spring boot会检查classpath路径由于有依赖spring-boot-starter-webSpring boot会把项目配置成web应用项目另外Spring Boot将把它的HelloController当作一个web控制器而且由于我的应用程序依赖于Tomcat服务器spring-boot-starter-tomcatSpring Boot也将使用这个Tomcat服务器来运行我的应用程序。
特别注意框架里是否装载Bean会配合条件表达式一起使用 真正使用时是混合使用的
EnableAutoConfiguration代码
package org.springframework.boot.autoconfigure;Target(ElementType.TYPE)
Retention(RetentionPolicy.RUNTIME)
Documented
Inherited
AutoConfigurationPackage
Import(AutoConfigurationImportSelector.class)
public interface EnableAutoConfiguration {String ENABLED_OVERRIDE_PROPERTY spring.boot.enableautoconfiguration;/*** Exclude specific auto-configuration classes such that they will never be applied.* return the classes to exclude*/Class?[] exclude() default {};/*** Exclude specific auto-configuration class names such that they will never be* applied.* return the class names to exclude* since 1.3.0*/String[] excludeName() default {};} 又有两个需要理解的元注解meta-annotation : AutoConfigurationPackage 和Import(AutoConfigurationImportSelector.class)
AutoConfigurationPackage代码
Target(ElementType.TYPE)
Retention(RetentionPolicy.RUNTIME)
Documented
Inherited
Import(AutoConfigurationPackages.Registrar.class)
public interface AutoConfigurationPackage {String[] basePackages() default {};Class?[] basePackageClasses() default {};
} 这个注解又用了一个Import 它的value值是 AutoConfigurationPackages.Registrar.class.而
AutoConfigurationPackages.Registrar 实现ImportBeanDefinitionRegistrar。还记得我以前写的博文Spring Bean注册的几种方式Spring Bean注册的几种方式_filterregistrationbean beandefinitionregistrypostp_董广明的博客-CSDN博客吗 Import(AutoConfigurationImportSelector.class)
这个注解是自动配置机制AutoConfigurationImportSelector实现了 DeferredImportSelector.
这个选择器的实现使用spring core功能方法SpringFactoriesLoader.loadFactoryNames() 该方法从META-INF/spring.factories加载配置类
而这个引导配置类从spring-boot-autoconfigure-2.3.0.RELEASE-sources.jar!/META-INF/spring.factories文件加载该文件有键org.springframework.boot.autoconfigure.EnableAutoConfiguration
注意spring引导自动配置模块隐式包含在所有引导应用程序中。 参考 SpringBoot中EnableAutoConfiguration注解的作用 SpringBoot中EnableAutoConfiguration注解的作用_51CTO博客_enableautoconfiguration注解报错 Talking about how Spring Boot works Talking about how Spring Boot works - Huong Dan Java How Spring Boot Works Spring Boot Rock’n’Roll -王福强的个人博客一个架构士的思考与沉淀 How Spring Boot auto-configuration works How Spring Boot auto-configuration works | Java Development JournalSpring Boot - How auto configuration works? https://www.logicbig.com/tutorials/spring-framework/spring-boot/auto-config-mechanism.html SpringBoot 启动原理 SpringBoot 启动原理 | Server 运维论坛 How SpringBoot AutoConfiguration magic works? https://www.sivalabs.in/how-springboot-autoconfiguration-magic/ EnableAutoConfiguration Annotation in Spring Boot EnableAutoConfiguration Annotation in Spring Boot