切换内置web服务器
springboot的web环境中默认tomcat作为内置服务器,其实springboot提供了四种内置服务器供我们选择,我们可以很方便的进行切换。
首先在pom文件中将tomcat排除。
排除tomcat依赖后引入jetty依赖
@Enable*注解
springboot中提供了很多Enable开头的注解,这些注解都是用于动态启动某些功能的。其底层原理是用Import注解导入一些配置类,实现Bean的动态加载。
springboot并不能直接获取其他jar里的bean。SpringbootApplication注解里的ComponentScan注解扫描的范围是当前引导包所在的包及其子包。
假设两个包
com.itheima.springbootenable主包com.itheima.config外包
主包和外包不是父子包关系,所以无法扫描到其子包的bean
方法1:使用@ComponentScan扫描com.itheima.config包。相当于指定去让扫哪个包。(先把子包配置到主包)
方法2:使用Import注解,加载类。这些类都会被springboot创建,放入ioc容器。
方法3:可以对Import注解进行封装。
就是在外包里写一个注解封装Import,主包直接调用这个注解就好了。
@Import注解
@Enable*底层依赖于@Import注解导入一些类,使用@Import导入的类会被加载到IOC容器中。而Import提供四种用法:
- 导入Bean
- 导入配置类
- 导入ImportSelector实现类。一般用于加载配置文件中的类。
- 导入ImportBeanDefinitionRegistrar实现类。
方法1:导入bean
注意,通过Import注解导入User后, 帮你创建的bean不一定叫user,所以通过类型来获取。但是可以通过getBeansOfType得到map对象,打印map就可以看到名字。
方法2:导入配置类
即@Import(配置类名.class)
方法3:导入ImportSelector的实现类
ImportSelector的实现类MyImportSelector,重写selectImports方法。
用Import注解导入MyImportSelector
方法4: 导入ImportBeanDefinitionRegistrar实现类。
通过实现ImporBeanDefinitionRegistrar,重写registerBeanDefinitions方法,在ioc里注册一个bean
用Import导入
因为我们没有注册Role的bean所以找不到Role这个bean。
@EnableAutoConfiguration注解
1.@EnableAutoConfiguration注解内部使用@Import(AutoConfigurationImportSelector.class)来加载配置类
2.配置文件位置:META-INF/spring.factories,该配置文件中定义了大量的配置类,当spring boot应用启动时,会自动加载这些配置类,初始化Bean
3.但是并不时所有的Bean都会被加载,在配置类中使用Condition来加载满足条件的Bean