一张图看懂Spring,控制反转(IOC)

Spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。

Spring 的核心功能是IOC和AOP,今天分享的就是IOC部分内容。

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

Spring 框架知识导图

Bean实例在调用无参构造器创建了空值对象后,就要对Bean对象的属性进行初始化。

初始化是有容器完成的,称为注入。根据注入方式的不同,常用的有两类;构造注入、设值注入。

相信这里有很多学习java的朋友,小编整理了一份java方面的学习资料,

有想要学习java的可以加一下我的学习群的哟,60833,4068,欢迎爱学习java的你们!

构造注入

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

设值注入

设值注入是指:通过setter方法传入被调用者的实例。这个注入方式简单、直观,因而在Spring的依赖注入中大量使用。

需要有相应的 setter。

命名空间注入

对于设值注入,也可使用 p 命名空间的方式进行注入。

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

Step2:在标签中使用 p 命名空间中的属性。

集合属性注入

域属性注入

对于域属性的注入,也可不在配置文件中显示的注入。可以通过为 <bean/>标签设置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

欢迎关注程序员胖胖,可视化学习java,每天更新文章,让Java学习更加简单。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值