首页 / JAVA / JAVA知识点梳理-Spring
JAVA知识点梳理-Spring
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA知识点梳理-Spring,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4563字,纯文字阅读大概需要7分钟。
内容图文
![JAVA知识点梳理-Spring](/upload/InfoBanner/zyjiaocheng/626/691988d6410a4b2995e8b45941996773.jpg)
九、Spring 篇
\99. Spring 中 ApplicationContext 和 BeanFactory 的区别
BeanFactory:
是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能;
ApplicationContext:
应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能:国际化、访问资源,如URL和文件、 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层 、消息发送、响应机制(ApplicationEventPublisher)、AOP(拦截器)
\100. 说一下你对 Spring IOC 的理解
谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。
为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。
\101. Spring IOC 有什么优点?
第一,资源集中管理,实现资源的可配置和易管理。
第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度。
\102. Bean 的生命周期
Spring启动,查找并加载需要被Spring管理的bean,进行Bean的实例化
Bean实例化后对将Bean的引入和值注入到Bean的属性中
如果Bean实现了BeanNameAware接口的话,Spring将Bean的Id传递给setBeanName()方法
如果Bean实现了BeanFactoryAware接口的话,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入
如果Bean实现了ApplicationContextAware接口的话,Spring将调用Bean的setApplicationContext()方法,将bean所在应用上下文引用传入进来。
如果Bean实现了BeanPostProcessor接口,Spring就将调用他们的postProcessBeforeInitialization()方法。
如果Bean 实现了InitializingBean接口,Spring将调用他们的afterPropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用
如果Bean 实现了BeanPostProcessor接口,Spring就将调用他们的postProcessAfterInitialization()方法。
此时,Bean已经准备就绪,可以被应用程序使用了。他们将一直驻留在应用上下文中,直到应用上下文被销毁。
如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,同样,如果bean使用了destory-method 声明销毁方法,该方法也会被调用。
其实就是:
- 实例化 Instantiation
- 属性赋值 Populate
- 初始化 Initialization
- 销毁 Destruction
\103. Spring Bean 的作用域有哪些?
1、singleton:唯一bean实例,Spring中的bean默认都是单例的。
2、prototype:每次请求都会创建一个新的bean实例。
3、request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTPrequest内有效。
4、session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTPsession内有效。
5、global-session:全局session作用域,仅仅在基于portlet的web应用中才有意义,Spring5已经没有了。
\104. Spring 是怎么管理事务的?
1、spring事务在操作过程中 起初会去连接池中获取一个数据库链接
2、获取到了链接之后会修改数据库的提交方式为手动提交,我们都知道mysql与oracle的事务隔离级别不同,提交的方式也不同,mysql你执行一条语句它自动帮你commit了,所以要修改为手动提交,
3、以上操作配合着spring动态代理对象中实现即可完成。
\105. 说说你对 Spring AOP 的理解
AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
\106. Spring 中用到了哪些设计模式?
1. 简单工厂
2. 工厂方法
3. 单例模式
4. 适配器
5. 包装器
6. 代理
7. 策略
8. 观察者
9. 模板方法
\107. Spring 框架中的单例 Bean 是线程安全的么?
Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Spring bean并没有可变的状态(比如Serview类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的。如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全。
最浅显的解决办法就是将多态bean的作用域由“singleton”变更为“prototype”。
\108. Spring 是怎么解决循环依赖的?
先说一下什么是循环依赖,Spring在初始化A的时候需要注入B,而初始化B的时候需要注入A,在Spring启动后这2个Bean都要被初始化完成
Spring的循环依赖有两种场景
- 构造器的循环依赖
- 属性的循环依赖
解决:
- 拿bean的时候先从singletonObjects(一级缓存)中获取
- 如果获取不到,并且对象正在创建中,就从earlySingletonObjects(二级缓存)中获取
- 如果还是获取不到就从singletonFactories(三级缓存)中获取,然后将获取到的对象放到earlySingletonObjects(二级缓存)中,并且将bean对应的singletonFactories(三级缓存)清除
- bean初始化完毕,放到singletonObjects(一级缓存)中,将bean对应的earlySingletonObjects(二级缓存)清除
内容总结
以上是互联网集市为您收集整理的JAVA知识点梳理-Spring全部内容,希望文章能够帮你解决JAVA知识点梳理-Spring所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。