入门程序和IOC简介

依赖注入或控制反转的定义中,调用者不负责被调用者的实例创建工作,该工作由Spring框架中的容器来负责,它通过开发者的配置来判断实例类型,创建后再注入调用者。由于Spring容器负责被调用者实例,实例创建后又负责将该实例注入调用者,因此称为依赖注入。而被调用者的实例创建工作不再由调用者来创建而是由Spring来创建,控制权由应用代码转移到了外部容器,控制权发生了反转,因此称为控制反转

1. IOC-控制反转

1.1 IOC-控制反转

IOC是Inverse of Control 的简写,意思是控制反转。是降低对象之间的耦合关系的设计思想。
通过IOC,开发人员不需要关心对象的创建过程,交给Spring容器完成。具体的过程是,程序读取Spring 配置文件,获取需要创建的 bean 对象,
通过反射机制创建对象的实例。
缺点:对象是通过反射机制实例化出来的,因此对系统的性能有一定的影响。
将对象的创建权利翻转给Spring容器.

1.2 DI-依赖注入

Dependency Injection,说的是创建对象实例时,同时为这个对象注入它所依赖的属性。相当于把每个bean与bean之间的关系交给容器管理。而这个容器就是spring。
例如我们通常在 Service 层注入它所依赖的 Dao 层的实例;在Controller层注入 Service层的实例。

1.3 IOC和DI

IOC的别名,2004年,Martin Fowler探讨了同一个问题,既然IoC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理对象变为由IoC容器主动注入。于是,他给“控制反转”取了一个更合适的名字叫做“依赖注入(Dependency Injection,DI)”。他的这个答案,实际上给出了实现IoC的方法:注入。
所谓依赖注入,就是由IoC容器在运行期间,动态地将某种依赖关系注入到对象之中。
所以,依赖注入(DI)和控制反转(IoC)是从不同的角度描述的同一件事情,就是指通过引入IoC容器,利用依赖关系注入的方式,实现对象之间的解耦.

2. 入门练习

2.1 创建web项目

项目名: spring-01-IOC

2.2 引入jar包

如果练习IOC ,需要引入org.springframework.beans,org.springframework.context
jar包位置!Spring下载文件中/libs文件下!: beans,context,core,context-support,spring-expression.
Maven项目,pom.xml添加一下内容:
org.springframeworkspring-context4.2.8.Releaseorg.springframeworkspring-core4.2.8.RELEASEorg.springframeworkspring-beans4.2.8.RELEASEorg.springframeworkspring-context-support4.2.8.RELEASEorg.springframeworkspring-expression4.2.8.RELEASEcommons-loggingcommons-logging1.1.2log4jlog4j1.2.14

2.3 引入log4j.properties

文件位置:src目录下
maven项目:resources目录下
log4j.rootLogger=ERROR,A1 log4j.logger.org.mybatis = ERROR log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
######2.4 创建一个操作类
packagecom.itqf.spring.bean;publicclassPerson{privateStringname;privateIntegerage;publicPerson(){System.out.println("------------> Person.Person");}//getter,setter }
######2.5 创建配置文件
建议命名: applicationContext.xml
建议位置: 普通项目src下/maven项目 resources下