1.Spring框架的作用是什么?
要点:
Spring是一个开源框架,主要为了简化企业级应用的开发。它是一个IOC和AOP的容器框架。核心功能如下:
(1)DI依赖注入容器,实现面向接口、模块化开发。
(2)AOP面向切面容器,实现程序的动态统一增强。
(3)为不同的ORM技术提供Session管理和声明式事务管理,简化数据层开发。
(4)提供优秀的SpringMVC框架,简化界面层开发,也可以轻松整合其他MVC框架。
(5)提供Spring Boot快速配置,Spring Cloud微服务架构。简化各种企业级技术的实现:如NoSQL、大数据、分布式技术等等。
2. 什么是DI?
要点:
DI(Dependency Injection)是指依赖注入或者叫控制反转(IOC),指程序中对象所依赖的子对象不用在硬编码中创建,而是通过容器(如Spring)在运行时再注入进来。
DI使得模块间只依赖于接口,而不是实现类(实现类在运行时由容器注入),使得软件模块可以独立开发与测试,降低耦合度。
3.什么是AOP?
要点:
AOP(Aspect Oriented Programming)面向切面编程。可以在不修改原有代码的基础上为方法注入增强代码的一种方式。AOP是通过代理模式或者动态代理的方式,把外部代码织入到原有程序中的。AOP典型的应用场景就是事务,日志,权限,异常处理等。
AOP利用“横切"的技术,剖开封装的对象内部,并将影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,有利于未来的可操作性和可维护性。
4.Spring常用注解
要点:
(1)组件相关:
@Component 组件,例如工具类
@Service 在业务逻辑层使用
@Repository 在数据访问层使用
@Controller 控制器的声明
(2)依赖注入:
@Autowired:由Spring提供,按类型实现依赖注入
@Resource:由JSR-250提供
(3)配置注解:
@Configuration 声明当前类为配置类
@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代<bean/>
@ComponentScan 设置包的扫描范围
(4)AOP注解:
@Aspect 声明一个切面(类上)
@After 后置通知
@Before 前置通知
@Around 环绕通知
@PointCut 声明切点
@Scope 设置Bean的作用范围
5.Spring中的设计模式
要点:
代理模式:在AOP使用动态代理实现切面编程
单例模式:在spring配置文件中定义的bean默认为单例模式。
模板方法模式:用来解决代码重复的问题。
前端控制器模式:Spring提供了DispatcherServlet来对请求进行分发。
依赖注入模式:贯穿于BeanFactory / ApplicationContext接口的核心理念。
工厂模式:BeanFactory用来创建对象的实例。
6.Spring支持的几种bean的作用域
要点:
singleton:单例,默认作用域,SpringIOC容器中只存在一个实例
prototype:每次通过Spring容器获取prototype定义的bean时,都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态,
request:在一次Http请求中,容器会返回该Bean的同一实例。而对不同的Http请求则会产生新的Bean,而且该bean仅在当前Http Request内有效。
session:在一次Http Session中,容器会返回该Bean的同一实例。而对不同的Session请求则会创建新的实例,该bean实例仅在当前Session内有效。
global Session:在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用 portlet context时有效。
7.Spring中Bean的生命周期?
要点:
Bean的生命周期经历了一系列方法,比较关键的过程有以下几点:
(1)实例化一个Bean,就是通常说的new;
(2)初始化:按照Spring上下文对实例化的Bean进行配置,也就是IOC注入。如果这个Bean的Spring配置中配置了init-method属性,会自动调用其配置的初始化方法
(3)Bean的调用:获取bean并进行调用;
(4)Bean销毁:当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean接口,会调用其实现的destroy方法。如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。
8.Spring中的事务管理
要点:
作为企业级应用程序框架,Spring在不同的事务管理API之上定义了一个抽象层。而应用程序开发人员不必了解底层的事务管理API,就可以使用Spring的事务管理机制。Spring既支持编程式事务管理(也称编码式事务),也支持声明式的事务管理。
编程式事务管理:将事务管理代码嵌入到业务方法中来控制事务的提交和回滚,在编程式事务中,必须在每个业务操作中包含额外的事务管理代码。
声明式事务管理:大多数情况下比编程式事务管理更好用。它将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。事务管理作为一种横切关注点,可以通过AOP方法模块化。Spring通过Spring AOP框架支持声明式事务管理。
9.Spring中的依赖注入方式有几种
要点:
(1)set属性注入
(2)构造器注入
(3)静态工厂方法注入
(4)实例工厂方法注入
10.Spring的配置方式有哪些
要点:
Spring支持xml配置,注解配置以及JavaConfig配置三种形式。
(1)基于 xml 配置
代码语言:javascript复制<bean id=”dao” class=”com.demo.dao.impl.UserDaoImpl”></bean>
(2)基于注解配置
可以通过在相关的类,方法或字段声明上使用注解,将 bean 配置为组件类本身,而不是使用 XML 来描述 bean 装配。默认情况下,Spring 容器中未打开注解装配
代码语言:javascript复制<beans>
<context:annotation-config/>
</beans>
(3) 基于 Java API 配置
Spring 的 Java 配置是通过使用 @Bean 和 @Configuration 来实现。
@Bean 注解扮演与 <bean /> 元素相同的角色。
@Configuration 标记配置类,替代了xml配置中的配置文件