一、基本概念
1. Spring框架的核心模块:springframework-core,几乎所有的spring框架,都需要在核心库基础上来运行。
2.核心库-bean的知识
作用:bean容器 - 存储bean对象 - 使用bean对象(和集合框架中的容器,非常类似 最重要的:存取)
3.使用spring容器以后:
- 注册:创建一个bean对象,存储到容器中
- 注入:从容器中取一个对象,注入到某个地方(某个对象的属性,方法参数)
4.说明:无状态的bean对象,就会使用容器来注册和注入。
- 无状态的bean:是指属性不随场景发生变化
- 有状态:属性随场景发生变化(比如,web开发,获取某个id的用户)。
二、springframework
1.总结:
2.从使用来说,创建一个spring,创建时就会自动的注册bean和注入bean
3.注册的方式:
(1)默认单例模式的类注解:5个@Controller,@Service,@Repository,@Component,@Configuration
(2)可以注册多的的方法注解——@bean方法注解
4.注入的方式:可以注入到属性或方法参数中
@Autowired注解,使用在属性中
三、考点总结
1.@Autowired和@Resource的区别?
- @Autowired是Spring框架提供的注解,@Resource是jdk提供的注解;
- @Autowired必须在spring框架中使用(否则回报错),@Resource可以不在spring框架中使用(不会报错,但是是否能引用到某个资源,jdk不提供实现);
- 显示指定某个bean,使用方式不同:@Resource(name="xxx")@Autowired结合@Qualifier。
2.同一个类型的Bean,如何正确注入到某个属性?
spring注入方式,有根据类型注入,名称注入......
- 类型注入:一个类型只能有一个bean
- 名称注入:一个类型有多个bean,但名称必须不同
(1)名称注入+变量名绑定
(2)名称注入+@Resource(name="xxx")
+@Autowired
+@Qualifier("xxx")
3.Bean名称重命名?
类注解的("Bean名称")
方法注解("Bean名称")也可以写成@Bean(name="Bean名称")
4.注入有几种注入方式?
- 属性注入@Autowired
- 构造方法注入@Autowired
5.Spring容器(常见面试题)主要是对IoC设计模式的实现
作用:(1)统一管理对象的整个生命周期;(2)组织对象间的依赖关系。
使用的API:BeanFactory和ApplicationContext
两种API之间的区别:
- BeanFactory是最底层的容器接口,只提供了最基础的容器功能:Bean 的实例化和依赖注入,并且使 用懒加载的方式,这意味着 beans 只有在我们通过 getBean() 方法直接调用它们时才进行实例化。
- ApplicationContext(应用上下文)是BeanFactory的子接口,与 BeanFactory 懒加载的方式不同,它 是预加载,所以,每一个 bean 都在 ApplicationContext 启动之后实例化。
- 除了基础功能,还添加了很多增强:
- 整合了Bean的生命周期管理
- i18n国际化功能(MessageSource)
- 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层
- 事件发布响应机制(ApplicationEventPublisher)
6.IoC/DI的理解?
6.1概念:
IoC (Inversion of Control) 即控制反转,是面向对象编程中的一种设计原则。主要是通过第三方IoC容器,对Bean对象进行统一管理,及组织对象之间的依赖关系。获得依赖对象的过程,由原本程序自己控制,变为了IoC容器来主动注入,控制权发生了反转,所以叫做IoC,控制反转。
IoC又叫做DI:由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维 护对象关系),相对 IoC 而言,依赖注入实际上给出了实现IoC的方法:注入。所谓依赖注入,就是由 IoC容器在运行期间,动态地将某种依赖关系注入到对象之中。
6.1概念简述:通过IoC容器,来统一管理Bean及组织对象间的依赖关系,控制权发生了反转(程序自己控制=>容器控制)IoC和DI(dependency Injection)是从不同角度来描述的——IoC注重的是控制权发生反转而DI则注重组织对象间的依赖关系
6.2作用:依赖注入(DI)和控制反转(IoC)是从不同的角度的描述的同一件事情,就是指通过引入IoC容器,利用依赖关系 注入的方式,实现对象之间的解耦。
6.3实现方式:DI是IoC的实现方式之一。而DI 的实现方式主要有两种:构造方法注入和属性注入。(IOC的实现方式:DI是其中之一。DI的实现方式:构造注入;属性注入)
6.4实现原理:主要依赖反射及ASM框架码实现(字节码框架操作字节码更为高效,功能更强大)
反射:能够创建某个类(编译时不知道运行时才知道)
获取某个类
调用/获取属性、方法
ASM:可以做到和反射类似的事情,还有更多更强大的功能效率比反射更高。