1. 谁控制谁:在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说你依赖的对象直接由你自己控制,但是有了 IoC 容器后,则直接由 IoC 容器来控制。所以“谁控制谁”,当然是 IoC 容器控制对象。
  2. 控制什么:控制对象。
  3. 什么是反转:没有 IoC 的时候我们都是在自己对象中主动去创建被依赖的对象,这是正转。但是有了 IoC 后,所依赖的对象直接由 IoC 容器创建后注入到被注入的对象中,依赖的对象由原来的主动获取变成被动接受,所以是反转。
  4. 哪些方面反转了:所依赖对象的获取方式被反转了。

三种注入方式

构造器注入:构造器注入,顾名思义就是被注入的对象通过在其构造方法中声明依赖对象的参数列表,让外部知道它需要哪些依赖对象。

setter 方法注入: 对于 JavaBean 对象而言,我们一般都是通过 getter 和 setter 方法来访问和设置对象的属性。所以,当前对象只需要为其所依赖的对象提供相对应的 setter 方法,就可以通过该方法将相应的依赖对象设置到被注入对象中。

接口方式注入 :接口方式注入显得比较霸道,因为它需要被依赖的对象实现不必要的接口,带有侵入性。一般都不推荐这种方式。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>
​<groupId>com.henu</groupId><artifactId>spring01_ioc</artifactId><version>1.0-SNAPSHOT</version>
​<dependencies><!-- spring4.3.20 --><!-- spring-context --><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.20.RELEASE</version></dependency>
​<!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.20.RELEASE</version></dependency>
​<!-- spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.20.RELEASE</version></dependency><!-- spring-beans --><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.3.20.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-expression --><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.3.20.RELEASE</version></dependency>
​<!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
​<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.20</version><scope>provided</scope></dependency>
​</dependencies>
​
</project>

BeautifulGirl

package com.henu.bean;
​
import lombok.Data;
import java.util.Date;
​
/*** @author George* @description**/
​
@Data
public class BeautifulGirl {public String like;public Date date;public void grilSay(){System.out.println("BeautifulGirl.grilSay()");}
}

YongBoy

package com.henu.bean;
​
import lombok.Data;
​
/*** @author George* @description**/
@Data
public class YongBoy {
​public  BeautifulGirl girl;
​public  void happy() {System.out.println("哈哈,年轻人有女朋友了......");}
​
}

Crm

package com.henu.bean;
​
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
​
import java.util.Date;
​
/*** @author George* @description**/
@Data
//全参
@AllArgsConstructor
//无参
@NoArgsConstructor
public class Crm {private int age;private String name;private Date birthday;
​
}
​

User

package com.henu.bean;
​
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
​
import java.util.List;
​
/*** @author George* @description**/
@Data
//无参
@NoArgsConstructor
//有参
@AllArgsConstructor
public class User {private int id;private String name;private String pwd;private List<Car> cars;
}

Car

package com.henu.bean;
​
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
​
/*** @author George* @description**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Car {private String logo;
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<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 http://www.springframework.org/schema/beans/spring-beans.xsd">
​<bean id="date" class="java.util.Date"></bean>
​<!-- 与name属性一模一样,不过不能使用特殊字符 --><bean id="BeautifulGirl" class="com.henu.bean.BeautifulGirl"><property name="like" value="唱、跳、rap"></property><!--这里要引用date,则需定义bean, 如上方所示--><property name="date" ref="date"></property></bean>
​<bean id="yongBoy" class="com.henu.bean.YongBoy"><!-- 引用类型注入:为 yongBoy下的girl对象,即girl是yongBoy中一个对象 --><property name="girl" ref="BeautifulGirl"></property></bean>
​
​<!--基于构造方法索引的注入--><!--<bean id="crm" class="com.henu.bean.Crm"><constructor-arg index="0" value="25"></constructor-arg><constructor-arg index="1" value="George"></constructor-arg><constructor-arg index="2" ref="date"></constructor-arg></bean>-->
​<!-- 基于构造方法类型注入 --><!--<bean id="crm" class="com.henu.bean.Crm"><constructor-arg type="int" value="23"></constructor-arg><constructor-arg type="java.lang.String" value="George"></constructor-arg><constructor-arg type="java.util.Date" ref="date"></constructor-arg></bean>-->
​<!--按照参数名称注入--><bean id="crm" class="com.henu.bean.Crm"><constructor-arg name="age" value="23"></constructor-arg><constructor-arg name="name" value="George"></constructor-arg><constructor-arg name="birthday" ref="date"></constructor-arg></bean>
​<bean id="car1" class="com.henu.bean.Car"><property name="logo" value="bmw"></property></bean><bean id="car2" class="com.henu.bean.Car"><property name="logo" value="oooo"></property></bean>
​<!--set方法注入 集合属性注入--><bean name="user" class="com.henu.bean.User"><property name="id" value="10001"></property><property name="name" value="George"></property><property name="pwd" value="123456"></property><property name="cars"><list><ref bean="car1"></ref><ref bean="car2"></ref></list></property></bean>
​
</beans>

SpringTest

package com.henu.test;
​
import com.henu.bean.BeautifulGirl;
import com.henu.bean.Crm;
import com.henu.bean.User;
import com.henu.bean.YongBoy;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
​
/*** @author George* @description**/
public class SpringTest {@Testpublic void test01(){ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");YongBoy yongBoy = context.getBean(YongBoy.class);BeautifulGirl girl = context.getBean(BeautifulGirl.class);Crm crm = context.getBean(Crm.class);User user = context.getBean(User.class);yongBoy.happy();girl.grilSay();System.out.println(crm.getName() + "->" + crm.getAge() + "->" + crm.getBirthday());System.out.println(user);}
}

结果展示:

哈哈,年轻人有女朋友了......
BeautifulGirl.grilSay()唱、跳、rap->>>Mon Sep 16 18:53:10 CST 2019
George->23->Mon Sep 16 19:16:17 CST 2019
User(id=10001, name=George, pwd=123456, cars=[Car(logo=bmw), Car(logo=oooo)])

spring入门案例plus相关推荐

  1. Spring入门案例【spring框架创建对象】(超详细)

    Spring入门案例 Spring框架概述 Spring框架特点 准备过程 下载 spring-5.2.6.RELEASE-dist.zip 下载 commons-logging-1.2-bin.zi ...

  2. spring入门案例

    几个细节: * 1).ApplicationContext(IOC容器的接口) * 2).给容器中注册一个组件:我们也从容器中按照id拿到了这个组件的对象? *     组件的创建工作,是容器完成: ...

  3. Spring入门——SpringBoot(春季靴???)

    SpringBoot 什么是SpringBoot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程. SpringBo ...

  4. Spring入门,看这篇就够了

    Spring入门,看这篇就够了 文章目录 Spring入门,看这篇就够了 一. 初识Spring 二.Spring Framework系统架构 三.核心概念 1.IoC(inversion of co ...

  5. Spring 入门教程

    Spring 入门教程 1.参考资料 尚硅谷-Spring5框架最新版教程(idea版) 雷丰阳spring.springmvc.mybatis.spring一站式学习 项目地址:Oneby / sp ...

  6. Spring——入门介绍(以版本5.2为例)

    目录 1.Spring框架概述 2.Spring入门案例 3.IoC介绍 (1)IoC概述 (2)IoC底层原理 (3)IoC接口 4.IoC操作--Bean 管理 (1)Bean 管理概述 (2)B ...

  7. Spring Data ElasticSearch入门案例

    Spring Data ElasticSearch入门案例 创建maven工程elasticsearch_springdata 基于maven导入坐标 导入spring data elasticsea ...

  8. Spring Cloud Alibaba - Sentinel入门案例(四)(热点规则 )

    Spring Cloud Alibaba - Sentinel入门案例(四)(热点规则 ) 回溯 什么是Sentinel? 正文 环境准备 简单使用 复杂使用 注意事项 回溯 什么是Sentinel? ...

  9. loc入门案例和解读,带你快速了解spring的loc

    1.loc思想 传统获取资源的方式 自己做饭:要洗菜,烧火,炒菜,煮饭等自己全过程参入工作,非常吃力,你必须熟练的掌握做饭的全部过程和每一个细节 在应用程序中的组件需要获取资源时,传统的方式是组件主动 ...

最新文章

  1. IIS 部署 node.js ---- 基础安装部署
  2. 软件工程 speedsnail 冲刺3
  3. [IOS]clang diagnostic、Wprotocol ..
  4. CentOS系统配置solr
  5. 报错The sandbox is not in sync with the Podfile.lock
  6. oracle DB_LINK
  7. Python:PyCharm提示Local variable ‘x‘ value is not used
  8. Parallels Desktop 17 亮点整理,7 大改进与变化
  9. java 集合工具类_Java 集合 Collections工具类
  10. matlab pi调节器,pi调节器的输入和输出_pi调节器的传递函数
  11. QT + VTK (QVTKWidget)显示点云,内存泄漏的解决方法
  12. 终于有人把联邦学习讲明白了
  13. linux , Shell 文件合并的命令
  14. 使用OTP动态口令(每30s变一次)进行登录认证
  15. springboot---yaml语法
  16. 在线查看.doc,.docx,.ofd,.PDF,.WPS以及Office文档的在线解析方式。
  17. Confluence简介和使用
  18. 选择ip代理软件要看那几点?
  19. 大专云计算是计算机吗,[扫盲加扯淡,我说云计算]大专学云计算很扯淡吗
  20. c++内存管理3: new handler、=default、=delete函数

热门文章

  1. Java中关于Arrays.sort的两种重载方法的理解
  2. SPOJ - OPTM Optimal Marks(进制拆分+最小割)
  3. 牛客多校8 - Interesting Computer Game(并查集)
  4. CodeForces - 1307C Cow and Message(思维)
  5. 洛谷P5357 - 【模板】AC自动机(二次加强版)(AC自动机+fail树)
  6. HDU - 2222 Keywords Search(AC自动机)
  7. TensorRT安装教程
  8. DCN RepPoints解读
  9. Ubuntu循环登录
  10. POJ1330(最近公共祖先)