1.1 SpringBoot是什么?
SpringBoot是一个全新的Java软件开发框架,很多人现在把它理解为一个脚手架。它基于快速构建理念,通过约定大于配置,开箱即用的方式,来简化Spring项目的初始搭建以及开发过程,提高开发效率。
1.2 SringBoot核心优势是什么?
SpringBoot为我们的开发提供里起步依赖(Starter Dependency)、自动配置(Auto Configuration)、健康检查(Actator)、嵌入式服务(Tomcat,Jetty)等核心特性。基于这些特性和优势,可以更好地服务我们的开发过程,也可以更好地简化项目构建、代码编写、项目配置、项目部署等,可以说SpringBoot技术是大势所趋的主流开发框架。
1.3 SpringBoot核心配置文件的类型
SpringBoot提供后缀为properties和yml类型的配置文件,也有人会算上factories类型,实际开发中yml类型使用较多,代码简便,但要特别注意书写格式。
1.4 SringBoot的启动过程是怎么样的?
a. 以@SpringBootApplication标注的启动类为入口,基于配置加载类通过ClassLoader将指定位置的类读到内存,底层通过线程调用IO从磁盘读取到内存。
b. 对类进行分析创建字节码对象(Class类型),通过反射获取配置信息。
c. 对于指定配置(例如由spring特定注解描述)的对象存储其配置信息(借助BeanDefintion对象存储)。
d. 基于BeanDefinition对象中class的配置构建类的实例(Bean对象)并进行bean对象的管理(可能会存储到bean池)。
2.1 Spring是一个什么框架?
Spring是一个资源整合框架,其核心就是资源整合,然后以一种更加科学的方式对外提供服务,例如提高对象的应用销量,降低系统开销,提高代码的可维护性等等。其官方网址为spring.io。
2.2 Spring框架中有哪些重要的模块?
Spring IOC,Spring AOP/Aspects,Spring Web,Spring Data(Data Access/Integration),Spring Instrument,Spring Messaging,Spring Core Container,Spring Test
2.3 Spring框架如何构建对象?
Spring框架中所有Bean对象都是通过BeanFactory接口类型的工厂对象构建的,此工厂底层会基于Java中的反射技术进行实现,首先获取类的字节码对象,然后基于字节码对象获取构造方法对象,最后基于构造方法对象构建类的实例对象。
2.4 如何理解spring中IOC设计?
IOC是一种设计思想,我们称之为控制反转,本质上讲解的是对象控制权问题,由原来程序猿自己创建和管理对象转为交由spring创建和管理对象。基于这种设计可以让初学者将对象的控制权转交给第三方,由第三方专业团队管理和应用对象。这样可以更好地避免对象的非正确使用方式,进而更好改善对象在内存中的科学应用。简单理解,IOC可以让你”衣来伸手饭来张口“。
2.5 为什么要讲对象交给spring管理?
Spring为我们的对象赋予了很多个更加科学的特性,例如延迟加载,作用域,生命周期方法以及运行时的自动依赖注入机制(降低耦合,提高程序的可维护性)等,基于这些特性可以更好地提高对象的应哟呵你给性能以及程序的可扩展性。
2.6 Spring框架中的Bean有什么特性?
Spring框架为了更加科学的管理和应用Bean对象,为其设计相关特性美丽如懒加载(@Lazy)、作用域(@Scope)以及生命周期方法。
2.7 Spring中用于定义Bean什么周期方法的注解?
@PostConstruct,@PreDestroy
2.8 Spring中用于实现依赖注入的注解?
@Autowired
@Autowired功能非常强大,但只适用于Spring框架,如果换成了JFinal等其他框架,功能就会失效。默认按照类型自动装配,匹配不到的话会根据名称匹配;作用范围:成员变量、构造器、方法、参数、注解。
@Resource
@Resource是JDK自带的注解,默认按照名称自动装配;作用范围:类、成员变量、方法。
2.9 @Autowired注解具体有什么作用?
上面有说到@Autowired是由Spring框架定义的,可以描述类中属性或相关方法等,Spring框架在项目运行时假如发现由它管理的Bean对象中有使用@Autowired注解描述的属性和方法,可以按照指定规则为属性复制(DI)。其基本规则是:首先要检测容器中是否由于属性或方法参数类型相匹配的对象,假如有且只有一个则直接注入。其次,假如检测到有多个,还会按照@Autowired描述的属性或方法参数名查找是否有名字匹配的对象,有则直接注入,没有则抛出异常。最后,假如我们有明确要求,必须要注入类型为指定类型,名字为指定名字的对象还可以使用@Qualifier注解对其属性或参数进行描述(此注解必须配合@Autowired注解使用)。
2.10 @Qualifier注解的作用?
@Qualifier注解用于描述属性或方法参数,当有多个相同类型的Bean,却只有一个需要自动装配是,将@Qualifier注解和@Autowired注解结合使用以消除这种混淆,指定要装配的确切的Bean。
2.11 @Component和@Configuration注解的异同点?
@Component注解通常用于描述一般bean对象,比如具备一定通用性的对象。
@Configuration注解通常用于描述spring工程中的配置类,可以说是一个增强版的@Component注解,在配置类中定义一些有@Bean注解描述的方法,然后通过这些方法对一些自己定义或第三方的Bean进行对象的创建和初始化。当我们使用@Configuration注解描述一个配置类是,Spring框架底层会为这个注解描述的配置类创建一个CGLIB代理对象,然后有代理对象调用@Bean注解描述的方法,同时底层会检测方法返回的Bean是否已创建,假如已创建则不再创建。
使用@Component注解描述类时,系统底层并不会为此类创建代理对象,只是创建当前类的对象,然后调用@Bean注解描述的方法,创建和初始化Bean,方法每调用一次就会创建一个新的对象。