Spring - IOC(控制反转) & DI(依赖注入)

简介: Spring - IOC(控制反转) & DI(依赖注入)

image.pngimage.pngimage.pngimage.png


一、IOC(控制反转)


image.pngimage.pngimage.png


二、DI(依赖注入)

DI Dependency Injection 依赖注入的概念,就是在Spring创建这个对象的过程中,将这个对象所依赖的属性注入进去。


三、BeanFactory & ApplicationContext

(1)BeanFactory

1、无国际化功能

2、getBean 时才实例化对象

(2)ApplicationContext

1、有国际化功能

2、加载配置文件时,就把所有单例模式的Bean实例化好,如果是多例模式的话,就等getBean的时候再实例化好


四、工程读取文件 & 磁盘读取文件

(1)工程读取文件

1、ClassPathXmlApplicationContext

2、ClassPathResource


(2)磁盘读取文件

1、FileSystemXmlApplicationContext

2、FileSystemResource

代码:

<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="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 http://www.springframework.org/schema/beans/spring-beans.xsd"><!--UserService的创建权交给了Spring--><beanid="userService"class="com.imooc.ioc.demo1.UserServiceImpl"><propertyname="name"value="李四"/></bean></beans>
packagecom.imooc.ioc.demo1;
/*** Created by jt on 2017/10/8.*/publicinterfaceUserService {
publicvoidsayHello();
}
packagecom.imooc.ioc.demo1;
/*** Created by jt on 2017/10/8.*/publicclassUserServiceImplimplementsUserService{
// 添加属性:privateStringname;
publicvoidsayHello() {
System.out.println("Hello Spring"+name);
    }
publicStringgetName() {
returnname;
    }
publicvoidsetName(Stringname) {
this.name=name;
    }
}
packagecom.imooc.ioc.demo1;
importorg.junit.Test;
importorg.springframework.beans.factory.BeanFactory;
importorg.springframework.beans.factory.xml.XmlBeanFactory;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
importorg.springframework.context.support.FileSystemXmlApplicationContext;
importorg.springframework.core.io.ClassPathResource;
importorg.springframework.core.io.FileSystemResource;
/*** Created by jt on 2017/10/8.*/publicclassSpringDemo1 {
@Test/*** 传统方式开发*/publicvoiddemo1(){
// UserService userService = new UserServiceImpl();UserServiceImpluserService=newUserServiceImpl();
// 设置属性:userService.setName("张三");
userService.sayHello();
    }
@Test/*** Spring的方式实现*/publicvoiddemo2(){
// 创建Spring的工厂ApplicationContextapplicationContext=newClassPathXmlApplicationContext("applicationContext.xml");
// 通过工厂获得类:UserServiceuserService= (UserService) applicationContext.getBean("userService");
userService.sayHello();
    }
@Test/*** 读取磁盘系统中的配置文件*/publicvoiddemo3(){
// 创建Spring的工厂类:ApplicationContextapplicationContext=newFileSystemXmlApplicationContext("c:\\applicationContext.xml");
// 通过工厂获得类:UserServiceuserService= (UserService) applicationContext.getBean("userService");
userService.sayHello();
    }
@Test/*** 传统方式的工厂类:BeanFactory*/publicvoiddemo4(){
// 创建工厂类:BeanFactorybeanFactory=newXmlBeanFactory(newClassPathResource("applicationContext.xml"));
// 通过工厂获得类:UserServiceuserService= (UserService) beanFactory.getBean("userService");
userService.sayHello();
    }
@Test/*** 传统方式的工厂类:BeanFactory*/publicvoiddemo5(){
// 创建工厂类:BeanFactorybeanFactory=newXmlBeanFactory(newFileSystemResource("c:\\applicationContext.xml"));
// 通过工厂获得类:UserServiceuserService= (UserService) beanFactory.getBean("userService");
userService.sayHello();
    }
}
目录
相关文章
|
1月前
|
XML 缓存 Java
搞透 IOC、Spring IOC ,看这篇就够了!
本文详细解析了Spring框架的核心内容——IOC(控制反转)及其依赖注入(DI)的实现原理,帮助读者理解如何通过IOC实现组件解耦,提高程序的灵活性和可维护性。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
21天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
31 0
|
2月前
|
Java Spring 容器
Spring IOC、AOP与事务管理底层原理及源码解析
【10月更文挑战第1天】Spring框架以其强大的控制反转(IOC)和面向切面编程(AOP)功能,成为Java企业级开发中的首选框架。本文将深入探讨Spring IOC和AOP的底层原理,并通过源码解析来揭示其实现机制。同时,我们还将探讨Spring事务管理的核心原理,并给出相应的源码示例。
135 9
|
2月前
|
存储 开发框架 Java
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
文章详细介绍了Spring、IOC、DI的概念和关系,解释了控制反转(IOC)和依赖注入(DI)的原理,并提供了IOC的代码示例,阐述了Spring框架作为IOC容器的应用。
32 0
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
|
3月前
|
缓存 Java Spring
手写Spring Ioc 循环依赖底层源码剖析
在Spring框架中,IoC(控制反转)是一个核心特性,它通过依赖注入(DI)实现了对象间的解耦。然而,在实际开发中,循环依赖是一个常见的问题。
42 4
|
2月前
|
XML Java 数据格式
Spring IOC容器的深度解析及实战应用
【10月更文挑战第14天】在软件工程中,随着系统规模的扩大,对象间的依赖关系变得越来越复杂,这导致了系统的高耦合度,增加了开发和维护的难度。为解决这一问题,Michael Mattson在1996年提出了IOC(Inversion of Control,控制反转)理论,旨在降低对象间的耦合度,提高系统的灵活性和可维护性。Spring框架正是基于这一理论,通过IOC容器实现了对象间的依赖注入和生命周期管理。
73 0
|
2月前
|
XML Java 数据格式
Spring的IOC和AOP
Spring的IOC和AOP
50 0
|
XML 数据格式 Java
Spring_DI_XML_01
欢迎移步博客查看-http://futaosmile.oschina.io/coder957 基于XMl的DI 1.设值注入 2.构造注入 3.p命名空间设值注入 4.
824 0
|
XML 数据格式 Python
Spring_DI_XML_02
欢迎移步博客查看-http://futaosmile.oschina.io/coder957 基于XMl的DI 1.集合属性注入 2.array数组属性注入 3.
888 0
|
XML Java 数据格式
Spring_DI_XML_03
欢迎移步博客查看-http://futaosmile.oschina.io/coder957 基于XMl的DI 匿名Bean 匿名内部Bean 同类抽象Bean 异类抽象Bean 多个配置文件-平行关系 多个配置文件-包含关系 Java中的匿名内部类 匿名Bean 没有id,但是可以通过autowire="byType"找到。
745 0