spring学习笔记贰——IOC/DI

spring有两项核心第一项是:


IOC/DI (Inversion of Control/ Dependency Injection):控制反转/依赖注入,与其说这是一门技术,不如说这是一种设计模式


比如有一个类,在类里面你有非静态方法,调用类里面的方法需要创建类的对象,我们通常使用的方法是调用该类的时候去new一个出来,但是使用spring就是把对象的创建交给spring配置创建对象,这时使你以后的代码会非常少出现new这个关键字,因为所有的对象创建都交给spring处理了


再比如说如果有A、B、C、D、E 五个类,要求分别使用这五个类中的一个或多个方法,那我岂不是要把这五个类都new出来?这只是小的项目,万一遇到大型项目可能就不止了。


java本身有着垃圾回收机制,使用spring框架后,java对象的使用和销毁都可以不用开发者处理,这对编程来说影响

是十分巨大的,这也是Rod Johnson成为一个改变Java世界的大师级人物的原因之一。。

咳咳扯远了,下面来讲讲IOC/DI的实现吧


IOC的底层实现包括四种技术:

1、创建XML文件配置

2、dom4j解析XML配置文件

3、工厂设计模式

4、反射机制


IOC的入门程序实现:

第一步:导入jar包

(1)spring所属jar包每一项都有三个jar包(xxx表示的是jar包名)

xxx-release.jar,xxx-release-javadic,xxx-source.jar

(2)做Spring最基本功能实现时,只需要导入四个核心包

Beans、Core、Context、Expression

(3)导入支持日志输出的jar包(xxx表示的是版本号)

commons-logging-xxx.jar


第二步:创建实现类,这里博主简单建立一个类


第三步:创建spring配置文件

(1)spring的配置文件的名字和位置都不是固定的

官方建议配置文件放在src根目录下和使用ApplicationContext作为配置文件的名字

(2)引用schema约束(bean约束)

PS:这里讲一下schema约束,XML Schema是一种用于定义和描述XML文档结构与内容模式语言,其出现是为了克服DTD的局限性,比DTD约束更加的严格。

当然,开发者只需要按照其约束编写spring配置文件就可以了,因为Spring框架会提供约束,开发者只需直接引用就行了。

(3)创建配置对象

到这步为止我们的入门程序中的配置就完成了,接下来是时候尝试去体验一下IOC的效果了

我们创建一个text测试类

测试结果如下


到目前为止,我们的第一个入门程序就完成了,这里实现了将对象的创建通过配置文件的配置交给Spring来处理,也是spring bean实例化的第一种方法,当然对于bean实例化还有其他方法


bean实例化的三种方式

第一种使用类的无参数构造方法创建(最常用)如果类里面没有无参的构造方法,会出现异常

第二种 使用静态工厂创建创建静态的方法,返回类对象,这里博主创建一个工厂类,返回的类对象用的是上面的UserService

修改applicationContext.xml中的bean为

测试类的写法获取修改为:

这种方法也可以获取对象,但是太麻烦一般不用


第三种 使用实例工厂创建创建非静态的方法,返回类对象,这种方法就不演示了

其余两种方法都是基于无参构造函数是实现的

当然,既然能够通过配置文件来实现通过无参构造函数来创建对象,那换句话我们也能通过配置文件来向对象的属性添加内容,这种技术,阿不,方式,spring称之为DI,也称为属性注入


开始之间,我们先来创建一个javabean以供使用

属性注入有三种方式:

第一种 使用set方法注入

第二种 有参数构造注入

第三种 使用接口注入

在spring框架里面只支持前面两种方式(博主只学了两种QAQ)


第一种 使用set方法注入

我们在user类给里面的name属性和sex属性添加get和set方法

在applicationContext.xml里面配置user的bean

测试类编写如下

能得出结果


ps:这里博主能直接打印是因为博主加入了toString方法


接下来是有参数构造函数注入,给user类添加有参构造函数的方法

修改xml配置文件为


效果与set的注入效果一致那么问题来了?在controller、service、dao三层结构中,应该怎么实现dao向service的注入呢,其实很简单,我们把dao当成service中的一个属性处理就是了,这种称为对象注入

先创建一个dao类

修改service类,给service添加dao的对象属性并进行调用`

下面就是修改配置文件了,这里博主选择构造函数注入对象

测试结果如下:



既然实现了对象的注入了,那么那些复杂的数据怎么注入呢

例如数组、list集合、map集合

我们来配置一下我们给user加几个属性并配置其相应的set方法和get方法

在配置文件中配置user类

运行测试文件,测试结果如下:



IOC和DI的关系

(1)IOC:控制反转,把对象创建交给Spring进行配置

(2)DI:依赖注入,向类里面的属性中设置值

(3)关系:以来注入不能单独存在,需要在IOC的基础上完成操作


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值