一张图搞定Spring,控制反转(IOC)
Monday, July 17, 2017
8:30 AM
一张图搞定Spring,控制反转(IOC)
一张图学Java 2017-06-22 16:01
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。
——百度百科
根据昨天的投票,框架和Java基础的内容呼声比较高。Java基础的小编已经分享了不少内容,今天就来说说Java框架的学习。关于Java框架怎么学,小编在头条问答《Java新手如何学习Spring、Struts、HIbernate三大框架》中进行了回答,答案被不少人收藏和转发,感兴趣的可以去看看。我的文章中图片多,都是eclipse中的截图,wifi情况下打开是大图,流量情况下默认是小图,需要进行设置或者点击图片查看大图。小编发的是高清图,但是头条对图片进行了压缩,如果你看了觉得不清晰,请包涵。
Spring 的核心功能是IOC和AOP,今天分享的就是IOC部分内容。
IOC: 控制反转,即创建被调用的实例不是由调用者完成,而是由Spring容器完成,并注入调用者。当应用了Ioc,一个对象依赖的其他对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。即,不是对象从容器中查找依赖,而是在对象初始化时不等对象请求就主动将依赖传递给它。
Spring 框架知识导图
Bean实例在调用无参构造器创建了空值对象后,就要对Bean对象的属性进行初始化。
初始化是有容器完成的,称为注入。根据注入方式的不同,常用的有两类;设值注入、构造注入。
设值注入
设值注入是指:通过setter方法传入被调用者的实例。这个注入方式简单、直观,因而在Spring的依赖注入中大量使用。
需要有相应的 setter。

构造注入
构造注入是指, 在构造调用者实例的同时, 完成被调用者的实例化。 即, 使用构造器设置依赖关系。需要有相应的构造器。

命名空间注入
对于设值注入,也可使用 p 命名空间的方式进行注入。
Step1:修改配置文件头,即添加相应约束,在其中声明 p 命名空间。(该约束在 Spring框架解压目录\docs\spring-framework-reference\htmlsingle\index.html 中。 Ctrl+F,对 p-namespace进行检索。第一个检索结果所链接的位置即有。)
Step2:在标签中使用 p 命名空间中的属性。


集合属性注入


域属性注入
对于域属性的注入,也可不在配置文件中显示的注入。可以通过为 标签设置autowire 属性值,为域属性进行隐式自动注入。
根据自动注入判断标准的不同,可以分为两种:
(1)autowire=”byName”: 根据名称自动注入
(2)autowire=”byType”: 根据类型自动注入


SPEL注入
SPEL即Spring EL表达式语言。在Spring配置文件中为Bean的属性注入值时,可直接使用SPEL表达式计算结果。

内部bean注入
若不希望代码直接访问某个 bean,即,在代码中通过 getBean 方法获取该 Bean实例,则可将该 Bean的定义放入调用者 bean定义的内部。

抽象bean注入
当若干 Bean实例同属于一个类, 且这些实例的属性值又有相同值时, 可以使用抽象 Bean,以简化配置文件。
抽象 Bean是用于让其它 bean 继承的。 这个 bean在 Bean类中是不能通过 getBean方法获取的。
设置 abstract属性为true 来指明该 bean 为抽象 bean, 默认值为 false。 不过,该bean 不为抽象 bean时,也可被继承。只不过,在应用中,用于被继承的 bean 一般为抽象bean。
使用同类抽象bean注入


使用异类抽象bean注入
当若干不同类对象具有相同的属性,且其值也相同的时候,可以使用异类抽象bean.
Spring部分面试题
1、Spring的优点有什么?
- Spring是分层的架构,你可以选择使用你需要的层而不用管不需要的部分
- Spring是POJO编程,POJO编程使得可持续构建和可测试能力提高
- 依赖注入和IoC使得JDBC操作简单化
- Spring是开源的免费的
- Spring使得对象管理集中化合简单化
2、描述一下spring中实现DI(dependency injection)的几种方式
方式一:接口注入,在实际中得到了普遍应用,即使在IOC的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中。
方式二:Type2 IoC: Setter injection对象创建之后,将被依赖对象通过set方法设置进去
方式三:Type3 IoC: Constructor injection对象创建时,被依赖对象以构造方法参数的方式注入
Spring的方式
3、简单描述下IOC(inversion of control)的理解
一个类需要用到某个接口的方法,我们需要将类A和接口B的实现关联起来,最简单的方法是类A中创建一个对于接口B的实现C的实例,但这种方法显然两者的依赖(Dependency)太大了。而IoC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现C放入IoC的容器(Container)中,通过一定的配置由容器(Container)来实现类A与接口B的实现C的关联。
4、Spring对很多ORM框架提供了很好支持,描述下在spring使用hibernate的方法
在context中定义DataSource,创建SessionFactoy,设置参数;DAO类继承HibernateDaoSupport,实现具体接口,从中获得HibernateTemplate进行具体操作。在使用中如果遇到OpenSessionInView的问题,可以添加OpenSessionInViewFilter或OpenSessionInViewInterceptor
收藏
举报
已使用 Microsoft OneNote 2016 创建。
