spring简介、容器、IOC

 

 

对IOC的理解:

在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起,而使用了Spring之后就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A对象需要使用B对象时,Spring就从存放对象的那个容器里面取出A要使用的那个B对象,然后交给A对象使用,至于Spring是如何创建那个对象,以及什么时候创建好对象的,A对象不需要关心这些细节问题(你是什么时候生的,怎么生出来的我可不关心,能帮我干活就行),A得到Spring给我们的对象之后,两个人一起协作完成要完成的工作即可。

  所以控制反转IoC(Inversion of Control)是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。

 出处:Bromon的blog上对IoC与DI浅显易懂的讲解

 

 

 

 

框架 软件的半成品 重复使用的代码

## 1、 spring是什么?
是一个开源的用来简化应用开发的框架
### (1)简化开发
spring对常用的api做了封装和简化(比如,对jdbc做了封装,使用spring jdbc来访问数据库,就不再需要考虑获取连接和关闭连接了)

 

### (2)管理对象
spring提供了一个容器,帮我们创建对象以及建立对象之间的依赖关系。这样做的好处是,降低对象之间的耦合度,方便代码的维护。

 

### (3)集成其他框架
spring可以将其他的一些框架集成进来(比如,集成用于任务调度的框架Quartz)。即“不发明重复的轮子”

一站式的框架


## 2、spring容器
### (1)spring容器是什么?
spring框架中的一个核心模块,用于管理对象
### (2)启动spring容器
step1.导包(spring-webmvc)
step2. 添加配置文件
step3. 启动spring容器

### (3)如何创建对象?
方式一 使用无参构造器(重点)
step1. 给类添加无参构造器(或者缺省构造器)
step2. 使用<bean>元素
step3. 调用容器的getBean方法来获得对象

方式二 使用静态工厂方法(了解)
通过调用类的静态方法来创建对象

方式三 使用实例工厂方法(了解)
通过调用对象的实例方法来创建对象


### (4)作用域
默认情况下,容器对于某个bean,只会创建一个实例。scope属性:用来配置作用域,缺省值是singleton(即一个bean只创建一个实例)
如果值为prototype(即一个bean会创建多个实例)

### (5)生命周期

初始化 分配资源
销毁 释放资源

初始化方法:<br/>
使用init-method属性来指定初始化方法名
注:spring容器创建对象后,会立即调用初始化方法

销毁方法:<br/>
使用destroy-method属性来指定销毁方法名
注: spring容器在关闭之前,会先销毁对象,在销毁对象之前, 会先调用对象的销毁方法。
只有作用域为单例时,销毁方法才会执行

### (6)延迟加载(了解)

spring容器启动之后会将所有作用域为单例(默认为单例)的bean创建好。<br/>
指定lazy-init属性值为true,此时,spring容器对于作用域为单例的bean,就不会创建相应的实例了。

 

## 3、IOC(inversion of Controll控制反转)

### (1)IOC是什么?
对象之间的依赖关系由容器来建立</br>

### (2)DI (Dependency Injection 依赖注入)是什么?
容器通过调用对象提供的set方法或者构造器来建立依赖关系。</br>
注:IOC是目标,DI是手段。</br>

### (3)set方式注入

step1. 提供相应的set方法
step2. 配置property元素<property name="" ref=""></property>
### (4)构造器方式注入

step1. 添加相应的构造器
step2. 使用constructor-arg元素
<constructor-arg index="0" ref=""></constructor-arg>

### (5)自动装配(了解)
自动装配,指的是spring容器依据某种规则,自动建立对象之间的依赖关系。
注意:1、默认情况下,容器不会自动装配
           2、可以通过autowire属性来告诉容器进行自动装配(容器仍然需要调用
           set方法或者构造器来完成依赖关系的建立)

     autowire属性:表示让容器自动装配,该属性有如下三个值:

     byName:容器依据属性名查找对应的bean,然后调用对应的
     set方法来完成注入
    注:
     1、如果找不到对应的bean,注入null
     2、不可能找到多个符合条件的bean
     byType:
    容器依据属性类型查找对应的bean然后调用对应的set方法
    来完成注入
   注:
    1、如果找不到对应的bean,注入null
    2、有可能找到多个符合条件的bean,此时会出错
    constructor:
   与byType类似,不同的是调用构造器来完成注入

  

 

posted @ 2018-04-11 13:18  island_0  阅读(286)  评论(0编辑  收藏  举报