控制反转(IoC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代
码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。
控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。
通过容器实现对象的创建,属性赋值,依赖的管理。
IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式是依赖
注入。应用广泛。
依赖:classA 类中含有 classB 的实例,在 classA 中调用 classB 的方法完成功能,即 classA
对 classB 有依赖。
Ioc 的实现:
➢ 依赖查找:DL( Dependency Lookup ),容器提供回调接口和上下文环境给组件。
➢ 依赖注入:DI(Dependency Injection),程序代码不做定位查询,这些工作由容器自行
完成。
依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建
被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。
Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持对象之间依赖关系
的管理。
Spring 框架使用依赖注入(DI )实现 IoC 。
Spring 容器是一个超级大工厂,负责创建、管理所有的 Java 对象,这些 Java 对象被称
为 Bean。Spring 容器管理着容器中 Bean 之间的依赖关系,Spring 使用“依赖注入”的方式
来管理 Bean 之间的依赖关系。使用 IoC 实现对象之间的解耦和。
2.1 开发工具准备
开发工具:idea2017 以上
依赖管理:maven
需要置 设置 maven 本机仓库:
2.2 Spring 的第一个
举例:01-primay
2.2.1 创建 maven
quickstart模板
2.2.2 引入 maven 依赖 pom.xml
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.16.RELEASE</version> </dependency> <!--插件--> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins>
2.2.3 定义接口与实体类
public interface SomeService { void doSome(); } public class SomeServiceImpl implements SomeService { public SomeServiceImpl() { super(); System.out.println("SomeServiceImpl无参数构造方法"); } @Override public void doSome() { System.out.println("====业务方法doSome()==="); } }
2.2.4 创建 Spring
在 src/main/resources/目录现创建一个 xml 文件,文件名可以随意,但 Spring 建议的名
称为 applicationContext.xml。
spring 配置中需要加入约束文件才能正常使用,约束文件是 xsd 扩展名。
使用约束文件的语法在:xsd-configuration.html。这个 xsd-configuration.html 文件位置是
在%SPRING_HOME%\docs\spring-framework-reference\html\xsd-configuration.html
SPRING_HOME:是从 spring 官网下载的资源 spring-framework-4.3.16.RELEASE-dist.zip 解
压后的目录。
注意,Spring 配置文件中使用的约束文件为 xsd 文件。若 Eclipse 中没有自动提示功能,
则需要将约束要查找的域名地址指向本地的 xsd 文件。相应的 xsd 文件在 Spring 框架解压目
录下的 schema 目录的相应子目录中。
约束文件:xsd(xml schema definition) xml 文档结构定义。
作用:验证 xml 文档的逻辑结构是否正确。
1.定义一个 xml 文档中都有什么元素
2.定义一个 xml 文档中都有什么属性
3.定义一个 xml 文档中元素可以有哪些子元素,以及元素的顺序。
4.定义一个 xml 文档中元素和属性的数据类型。
这里需要的是 spring-beans.xsd 约束文件,故需要在 beans 子目录中查找相应版本
的约束文件。
<bean />:用于定义一个实例对象。一个实例对应一个 bean 元素。
id:该属性是 Bean 实例的唯一标识,程序通过 id 属性访问 Bean,Bean 与 Bean 间的依
赖关系也是通过 id 属性关联的。
2.2.5 定义测试类
@Test public void test01(){ System.out.println( "Hello Spring!" ); //定义Spring的配置文件, 配置文件是在类路径的根目录之下 String config = "applicationContext.xml"; //创建Spring的容器对象.根据Spring配置文件的位置,使用接口的不同实现类 //如果Spring的配置文件是在类路径(classpath),使用ClassPathXmlApplicationContext ApplicationContext ctx = new ClassPathXmlApplicationContext(config); //从容器中获取对象 使用getBean("<bean>的id") SomeService service = (SomeService) ctx.getBean("someService"); //调用业务方法 service.doSome(); }
2.2.6 使用 spring 创建 非自定义类对象
spring 配置文件加入 java.util.Date 定义:
<bean id="myDate" class="java.util.Date" />
MyTest 测试类中:
调用 getBean(“myDate”); 获取日期类对象。
2.2.7 容器接口和实现类
ApplicationContext 接口 (容器)
ApplicationContext 用于加载 Spring 的配置文件,在程序中充当“容器”的角色。其实现
类有两个。