搭建一个maven工程,现在我们搭建一个项目
pom文件先建一个 我们看我们的maven仓库是空的
xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0modelVersion> <groupId>com.testgroupId> <artifactId>xxxxartifactId> <version>0.0.1version> <properties> <java.version>1.8java.version> <spring-boot-dependencies.version>1.5.2.RELEASEspring-boot-dependencies.version> properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-dependenciesartifactId> <version>${spring-boot-dependencies.version}version> <type>pomtype> <scope>importscope> dependency> dependencies> dependencyManagement> <dependencies> dependencies> project>
当我们在dependencyManagement中加入spring-boot-dependencies的时候maven会自动导入jar包。
然而我们打开工程模块依赖的时候不会将该jar包加入到工程依赖中。
xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0modelVersion> <groupId>com.testgroupId> <artifactId>xxxxartifactId> <version>0.0.1version> <properties> <java.version>1.8java.version> <spring-boot-dependencies.version>1.5.2.RELEASEspring-boot-dependencies.version> properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-dependenciesartifactId> <version>${spring-boot-dependencies.version}version> <type>pomtype> <scope>importscope> dependency> dependencies> dependencyManagement> <dependencies> <dependency> <groupId>org.webjarsgroupId> <artifactId>extjsartifactId> <version>6.2.0version> dependency> dependencies> project>
当我们在dependencies中加入extjs的时候maven会自动导入jar包。
我们打开工程依赖的时候会将该jar包加入到工程依赖中。
----------------------------------------------------------------------------------------------------------------------------------------
注意:☆☆☆☆☆
ServletContainerInitializer:启动容器时负责加载相关配置
容器启动时会自动扫描当前服务中ServletContainerInitializer的实现类,并调用其onStartup方法。
其参数Set
@HandlesTypes会自动扫描项目中所有的xxx.class的实现类,并将其全部注入Set。
@HandlesTypes({WebApplicationInitializer.class}) public class SpringServletContainerInitializer implements ServletContainerInitializer { public SpringServletContainerInitializer() { } public void onStartup(Set> webAppInitializerClasses, ServletContext servletContext) throws ServletException { Listinitializers = new LinkedList(); Iterator var4; if (webAppInitializerClasses != null) { var4 = webAppInitializerClasses.iterator(); while(var4.hasNext()) { Class> waiClass = (Class)var4.next(); if (!waiClass.isInterface() && !Modifier.isAbstract(waiClass.getModifiers()) && WebApplicationInitializer.class.isAssignableFrom(waiClass)) { try { initializers.add((WebApplicationInitializer)waiClass.newInstance()); } catch (Throwable var7) { throw new ServletException("Failed to instantiate WebApplicationInitializer class", var7); } } } } if (initializers.isEmpty()) { servletContext.log("No Spring WebApplicationInitializer types detected on classpath"); } else { servletContext.log(initializers.size() + " Spring WebApplicationInitializers detected on classpath"); AnnotationAwareOrderComparator.sort(initializers); var4 = initializers.iterator(); while(var4.hasNext()) { WebApplicationInitializer initializer = (WebApplicationInitializer)var4.next(); initializer.onStartup(servletContext); } } } }
对Spring Boot而言,@SpringBootApplication的作用就是@Configuration, @EnableAutoConfiguration与@ComponentScan的集合,所以也会存在@EnableAutoConfiguration的粒度管理问题。
添加@EnableAutoConfiguration时(请务必注意,一个Spring Boot程序最好只添加唯一一个这样的注解),由于Spring Boot是根据程序加载的jar包自动添加配置,所以就会导致自动配置一些不必要的配置,性能浪费倒是小事,关键是控制力度与问题难以追踪。
基于以上的原因,一般而言,@EnableAutoConfiguration只适用于初学者,对控制力与把控力要求的架构师或高级用户显然是不合适的,所以有必要找到@SpringBootApplication的替代方案,自己控制Bean创建的过程与数量。
参考:https://blog.csdn.net/yiifaa/article/details/72852572
------------------------------------------------------------------------------------------------------------------------------
SpringBoot获得application.properties中数据的几种方式
1)@Autowired
private Environment environment;
String xxx = environment.getProperty("xxx");
2)ConfigurableApplicationContext context=SpringApplication.run(SpringBoot01Application.class, args);
String str1=context.getEnvironment().getProperty("xxx");
3)@Value("${xxx.xxx}")
private String xxx;
注意:
1)使用@Value时获取配置文件中属性时,如果是application.properties,就不要写@PropertySource("application.properties"),其他要写。
参考:https://blog.csdn.net/qq_37171353/article/details/78005845
java中元注解有四个: @Retention @Target @Document @Inherited;
1) @Retention:注解的保留位置
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
2)@Target:注解的作用目标
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
3)@Document:说明该注解将被包含在javadoc中
4)@Inherited:说明子类可以继承父类中的该注解