一、SpringBoot自动装配原理是什么?
- @SpringBootApplication
- @EnableAutoConfigration\@SpringBootConfigration\@ComponentScan
- @AutoConfigrationPackage\@Import
- META-INF\spring.factories
二、说一下@Configuration中的属性proxyBeanMethods的作用?
首先,引入两个概念:Full 全模式。Lite 轻量级模式
- Ful 全模式:proxyBeanMethods=true。该模式下注入容器中的同一个组件,无论被取出多少次都是同一个bean实例,即单实例对象。在该模式下SpringBoot每次启动时都会检查容器中是否存在@Bean修饰的组件。
- Lite 轻量级模式:proxyBeanMethods=false. 该模式下注入容器中的同一个组件,每次被取出会是一个新的bean实例,即多实例对象。在该模式下SpringBoot启动时不会检查容器中是否存在@Bean修饰的组件。
使用场景
- Full 全模式:当在同一个Configuration配置类中,注入到容器中的bean实例之间有依赖关系时,使用全模式。
- Lite 轻量级模式:当在同一个Configuration配置类中,注入到容器中的bean实例之间没有依赖关系时,使用轻量级模式,提高springboot的启动速度和性能。
默认
proxyBeanMethods=true
三、说一下对@Import注解的理解?
@Import的用法:
- import一个普通类,Spring会将该类加载到Spring容器中。
- import一个类,该类实现了ImportBeanDefinitionRegistrar接口,在重写registerBeanDefinitions方法中,能拿到BeanDefinitionRegistry注册器,手动往beanDefinitionMap中注册beanDefinition。
- import一个类,该类实现了ImportSelector接口,重写selectImports方法,该方法返回String[]数组对象,数组中的类都会被注入到Spring容器中。
- @Import在使用时可以声明在JAVA类上,或者作为元注解使用(即声明在其他注解上)
使用场景
- 用法二适用于Spring-mybatis中,扫描dao信息,生成代理类信息。
- 用法三适用已Springboot的自动装配当中,扫描自动配置类的信息。
注意事项
@Import在使用时,必须要保证能被IOC容器扫描到,所以通常它会和@Configuration或者@ComponentScan配套使用。
标签:容器,面试题,java,--,模式,bean,实例,Import,轻量级 From: https://www.cnblogs.com/aleda-territory/p/17352801.html