- IoC和DI,什么是AOP
- 自动装配的方式
- @Autowired和@Resource之间的区别
- BeanFactory和ApplicationContext的区别
- Bean的作用域
- Spring通知(Advice)有哪些类型
- Spring Bean的生命周期
- 什么是Spring MVC
- SpringMVC的流程
- Spring的优点
- 开启SpringBoot特性有哪几种方式
- Spring Boot Starter的工作原理
- Spring Boot 的核心注解是哪个
1. 请问什么是IoC和DI,什么是AOP
- IOC就是控制反转,是指创建对象的控制权的转移,由容器根据配置文件去创建实例和管理各个实例之间的依赖关系
- 控制反转是通过DI依赖注入来实现的,依赖注入的几种方式:
xml配置:
Setter方法注入:<bean><property></property></bean>
构造方法注入:<bean><constructor-arg></constructor-arg></bean>
注解注入:
@component 取代
@Repository(“名称”):dao层
@Service(“名称”):service层
@Controller(“名称”):web层
@Autowired:自动根据类型注入 - AOP称为面向切面,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,可用于权限认证、日志、事务处理。
- AOP实现的关键在于代理模式,AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ;动态代理则以Spring AOP为代表。
AspectJ是静态代理,也称为编译时增强,AOP框架会在编译阶段生成AOP代理类,并将AspectJ(切面)织入到Java字节码中,运行的时候就是增强之后的AOP对象。
Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是每次运行时在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。
2. 自动装配的方式:
- byName:需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致;
- byType:需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的set方法的值一致;
3. @Autowired和@Resource之间的区别:
- @Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。可以通过@Qualifier指定对应id的bean
- @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入。是java的注解。可通过name属性指定对应id的bean,相当于@Autowired+@Qualifier;
4. 请说明一下Spring中BeanFactory和ApplicationContext的区别是什么?
- BeanFactory每次在获得对象时才会创建对象;第一次getBean时才会初始化Bean。
- ApplicationContext每次容器启动时就会创建容器中配置的所有对象,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能
-
ClassPathXmlApplicationContext:从类路径加载Spring容器;
-
FileSystemXmlApplicationContext:从文件系统加载Spring容器;
-
AnnotationConfigApplicationContext:通过JavaConfig加载Spring容器;
5. Bean的作用域:
singleton;prototype;request;session;
6. Spring通知(Advice)有哪些类型?
- 前置通知(Before Advice):在连接点(Join point)之前执行的通知。
- 后置通知(After Advice):当连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
- 环绕通知(Around Advice):包围一个连接点的通知,这是最强大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为。它也可以选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。
- 返回后通知(AfterReturning Advice):在连接点正常完成后执行的通知(如果连接点抛出异常,则不执行)
- 抛出异常后通知(AfterThrowing advice):在方法抛出异常退出时执行的通知
7. Spring Bean的生命周期?
- 简单来说,Spring Bean的生命周期只有四个阶段:实例化 Instantiation --> 属性赋值 Populate --> 初始化 Initialization --> 销毁 Destruction
- 待补充
8. 什么是Spring MVC ?
- Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
9. SpringMVC的流程?
- 用户发送请求至前端控制器DispatcherServlet;
- DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
- 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
- DispatcherServlet 调用 HandlerAdapter处理器适配器;
- HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
- Handler执行完成返回ModelAndView;
- HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
- DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
- ViewResolver解析后返回具体View;
- DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
- DispatcherServlet响应用户
10. Spring的优点:
- 方便解耦,简化开发:将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合
- AOP编程的支持:Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
- 声明事物的支持:只需要通过配置就可以完成对事务的管理,而无需手动编程
- 方便程序的测试:
- 方便集成各种优秀框架:内部提供了对各种优秀框架(如:Struts2、Hibernate、MyBatis等)的直接支持
11. 开启SpringBoot特性有哪几种方式?
- 继承spring-boot-starter-parent项目
- 导入spring-boot-dependencies项目依赖
12. Spring Boot Starter的工作原理是:
- Spring Boot 在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR包,根据spring.factories配置加载AutoConfigure类,根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context
13. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
- 启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
-
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
-
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
-
@ComponentScan:Spring组件扫描。