使用 intellijIDEA 创建 maven 工程进行 Spring ioc 测试 ioc 概念
控制反转(Inversion of Control,缩写为IOC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
IOC和DI区别IOC: 控制反转,把对象创建交给spring进行配置
DI: 依赖注入,向类里面的属性中设置值
关系:依赖注入不能单独存在,需要在ioc基础之上完成操作
创建 spring 实例进行 ioc 测试我们使用 intellijIDEA 来完成这一操作,首先创建 maven 工程(maven提供了 java 中 jar 包的下载管理,方便我们使用下载和导入 jar 包,推荐使用)。打开 idea,选择 Create New Project, 在弹出来的窗口中选择创建 maven 工程,设置好 JDK 后点击 next 进行下一步。
设置好 GrouId、ArtifactId、Version 后,按提示一路设置创建好 maven 项目。
我们修改 pom.xml 设置,配置需要添加下载的 jar 包:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>当我们修改pom.xml 文件时,idea 会提示我们导入,我们点击 Import Change即可,当然也可以设置Auto-Import自动导入:
我们在 src/main/java 下新建一个 package:cn.itcast.ioc, 并在 package 下新建 User.java:
package cn.itcast.ioc; public class User { public void add(){ System.out.println("add......"); } //public static void main(String[] args) { //原始做法 //User user = new User(); //user.add(); //} }在 resources目录下新建 applicationContext.xml 配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!-- scheme约束 --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans "> <!-- ioc 入门 --> <bean></bean> </beans>然后在 src/main/java 下创建测试文件 TestIOC.java ,尝试能否通过装载 bean,交由 spring 创建对象,通过配置文件输出 ioc 实例:
package cn.itcast.ioc; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestIOC { @Test public void testUser(){ //1.加载 spring 配置文件,根据创建对象 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //2.得到配置创建的对象 User user = (User) context.getBean("user"); user.add(); } }运行 TestIOC.java , 若控制台能输出 add() 方法,便测试成功。
通过配置文件注入属性介绍:创建对象时候,向类里面属性设置值。
在 spring 中我们一般采用通过set 方法注入。
举个栗子:
在 src/main/java/ 下创建 UserService.java:
package cn.itcast.ioc; public class UserService { //1 定义 user 类型 private User user; //2 生成set 方法 public void setUser(User user) { this.user = user; } public void add(){ System.out.println("service...."); user.add(); } }修改 applicationContext.xml 文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans "> <!-- 注入对象类型 --> <!-- 配置 service 和 user 对象 --> <bean></bean> <bean> <!-- 注入 user 对象 name 属性值, service 类里面的属性名称 ref 属性, 配置bean 标签中 id 值 --> <property ref="user"></property> </bean> </beans>