什么是Spring?
Spring是一个生态圈,里面包含很多项目,比如springBoot、springCloud、springData、springFramwork。
SpringFramwork是Spring的核心项目,里面主要用的比较多的就是IOC和AOP
使用Spring框架有什么好处?
使用DI(依赖注入)使得构造器和javaBean文件的依赖关系清晰
spring框架更加轻量级
spring集成了很多框架技术如ORM、logging等等
spring框架测试简单因为把测试环境集成在里面
spring为web环境提供了一个优秀的springMVC框架
spring提供了便捷的事务管理接口
什么是控制反转?什么是依赖注入?
控制反转是指在运行时被装配器对象来绑定耦合对象的一种编码技巧,对象之间的耦合关系在编译时是未知的。
依赖注入是spring实现IOC思想的具体实现方式
依赖注入的实现方式
1 构造器注入
2 Setter注入
接口注入在spring4被移除
BeanFactory和ApplicationContext有什么区别?
BeanFactory可以理解为Bean集合的工厂类。包含了bean的定义,以便于收到客户端请求将对应的bean实例化。
BeanFactory还能在实例化对象的生成协作类之间的关系,BeanFactory还包含了bean的生命周期的控制,调用客户端的初始化方法和销毁方法。
ApplicationContext满足BeanFactory对Bean的操作的同时 还满足其他功能,提供支持国际化、统一资源文件读取方式、监听器中注册bean的事件。
ApplicationContext有那些实现方式?
1 ClassPathXmlApplicationContext :从classpath的xml配置文件中读取上下文,并生成上下文定义
2 FileSystemXmlApplicationContext: 由文件系统中的xml配置文件读取上下文
3 XmlWebApplicationContext : 由Web应用的XML文件读取上下文
Spring提供几种配置方式来设置元数据?
1 基于XML配置
2 基于注解
3 基于java的配置
SpringBean的生命周期?
在一个bean实例被初始化的时候,需要执行一系列的初始化操作以达到可用状态,同样当一个bean不在被调用时需要进行相关的析构操作将bean从容器中移除
bean的生命周期由两组回调方法组成:初始化之后调用回调方法 销毁之前调用回调放啊
Spring管理bean生命周期事件的方式?
1 InitializingBean 和 DisposableBean回调的接口
2 针对特殊行为的Aware接口
3 Bean配置文件中的Custom init()和destroy()
4 @PostConstruct和@PreDestroy
SpringBean作用域?
1 singleton : 默认范围,确保不管接受到多少个请求,每个容器只有一个bean实例。
2 prototype: 远行范围与单例相反,为每一个bean请求提供一个实例
3 request : 在请求bean范围为每一个来自客户端的网络请求创建一个实例,在请求完成后 ,bean会失效并被垃圾回收器回收
4 Session:与请求返回类似,确保每个session中有一个bean实例
5 global-session 全局session
Spring中的单例的bean是线程安全的吗?
不是线程安全的,需要开发者自行保证。 大部分的spring单例bean没有可变状态是安全的,如果bean的状态有多种的话(View Model),需要自行保证
Spring Bean的自动装配?
1 可以通过xml 配置文件 <bean id="testDao" class="" autowire="byName">
然后开启扫描 <context:annotation-config />
Spring Bean自动装配的方式和区别?
1 no : 默认关闭
2 byName: 设置可以根据Bean名称设置依赖关系,当向一个Bean中自动装配一个属性时,容器将根据bean的名称自动在配置文件中查询到一个匹配的bean,如果找到就装配,未找到则报错
3 byType:根据bean的类型来设置依赖关系,当向一个Bean中自动装配一个属性时,容器将根据bean的类型自动在配置文件中查询到一个匹配的bean,如果找到就装配,未找到则报错
4 constructor : 构造器自动装配和ByType类似,只是使用构造器进行装配
构造函数注入和设置注入的区别?
1 设置注入支持大部分的依赖注入,构造函数注入不支持大部分的依赖注入,因为调用构造方法中必须传入正确的构造参数
2 设置注入不会重写构造方法的值
3 构造函数注入不允许出现生成依赖不完整的对象
4 设置注入的方法可与i解决循环依赖的问题。因为对象的设置是在对象被创建之前被调用