切换内置web服务器

springboot的web环境中默认tomcat作为内置服务器,其实springboot提供了四种内置服务器供我们选择,我们可以很方便的进行切换。

首先在pom文件中将tomcat排除。

springboot 打成可执行jar 排除配置文件 spring boot排除自动配置_后端

springboot 打成可执行jar 排除配置文件 spring boot排除自动配置_java_02

 

排除tomcat依赖后引入jetty依赖

springboot 打成可执行jar 排除配置文件 spring boot排除自动配置_java_03

@Enable*注解 

springboot中提供了很多Enable开头的注解,这些注解都是用于动态启动某些功能的。其底层原理是用Import注解导入一些配置类,实现Bean的动态加载。

springboot并不能直接获取其他jar里的bean。SpringbootApplication注解里的ComponentScan注解扫描的范围是当前引导包所在的包及其子包。

假设两个包


com.itheima.springbootenable主包com.itheima.config外包


主包和外包不是父子包关系,所以无法扫描到其子包的bean

方法1:使用@ComponentScan扫描com.itheima.config包。相当于指定去让扫哪个包。(先把子包配置到主包)

springboot 打成可执行jar 排除配置文件 spring boot排除自动配置_java_04

方法2:使用Import注解,加载类。这些类都会被springboot创建,放入ioc容器。

springboot 打成可执行jar 排除配置文件 spring boot排除自动配置_java_05

 方法3:可以对Import注解进行封装。

就是在外包里写一个注解封装Import,主包直接调用这个注解就好了。

springboot 打成可执行jar 排除配置文件 spring boot排除自动配置_加载_06

springboot 打成可执行jar 排除配置文件 spring boot排除自动配置_spring boot_07

@Import注解 

@Enable*底层依赖于@Import注解导入一些类,使用@Import导入的类会被加载到IOC容器中。而Import提供四种用法:

  1. 导入Bean
  2. 导入配置类
  3. 导入ImportSelector实现类。一般用于加载配置文件中的类。
  4. 导入ImportBeanDefinitionRegistrar实现类。

方法1:导入bean

springboot 打成可执行jar 排除配置文件 spring boot排除自动配置_spring_08

注意,通过Import注解导入User后, 帮你创建的bean不一定叫user,所以通过类型来获取。但是可以通过getBeansOfType得到map对象,打印map就可以看到名字。

方法2:导入配置类

即@Import(配置类名.class)

方法3:导入ImportSelector的实现类

ImportSelector的实现类MyImportSelector,重写selectImports方法。

springboot 打成可执行jar 排除配置文件 spring boot排除自动配置_spring boot_09

 用Import注解导入MyImportSelector

springboot 打成可执行jar 排除配置文件 spring boot排除自动配置_后端_10

方法4: 导入ImportBeanDefinitionRegistrar实现类。

通过实现ImporBeanDefinitionRegistrar,重写registerBeanDefinitions方法,在ioc里注册一个bean

springboot 打成可执行jar 排除配置文件 spring boot排除自动配置_加载_11

用Import导入

springboot 打成可执行jar 排除配置文件 spring boot排除自动配置_后端_12

 因为我们没有注册Role的bean所以找不到Role这个bean。

@EnableAutoConfiguration注解 

1.@EnableAutoConfiguration注解内部使用@Import(AutoConfigurationImportSelector.class)来加载配置类

2.配置文件位置:META-INF/spring.factories,该配置文件中定义了大量的配置类,当spring boot应用启动时,会自动加载这些配置类,初始化Bean

3.但是并不时所有的Bean都会被加载,在配置类中使用Condition来加载满足条件的Bean