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();
    }
}
目录
相关文章
|
12天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
10天前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
28天前
|
Java 数据库 数据安全/隐私保护
轻松掌握Spring依赖注入:打造你的登录验证系统
本文以轻松活泼的风格,带领读者走进Spring框架中的依赖注入和登录验证的世界。通过详细的步骤和代码示例,我们从DAO层的创建到Service层的实现,再到Spring配置文件的编写,最后通过测试类验证功能,一步步构建了一个简单的登录验证系统。文章不仅提供了实用的技术指导,还以口语化和生动的语言,让学习变得不再枯燥。
40 2
|
3月前
|
存储 Java 程序员
SpringIOC和DI的代码实现,Spring如何存取对象?@Controller、@Service、@Repository、@Component、@Configuration、@Bean DI详解
本文详细讲解了Spring框架中IOC容器如何存储和取出Bean对象,包括五大类注解(@Controller、@Service、@Repository、@Component、@Configuration)和方法注解@Bean的用法,以及DI(依赖注入)的三种注入方式:属性注入、构造方法注入和Setter注入,并分析了它们的优缺点。
44 0
SpringIOC和DI的代码实现,Spring如何存取对象?@Controller、@Service、@Repository、@Component、@Configuration、@Bean DI详解
|
3月前
|
存储 开发框架 Java
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
文章详细介绍了Spring、IOC、DI的概念和关系,解释了控制反转(IOC)和依赖注入(DI)的原理,并提供了IOC的代码示例,阐述了Spring框架作为IOC容器的应用。
51 0
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
|
4月前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
4月前
|
Java 数据库连接 Maven
Spring基础1——Spring(配置开发版),IOC和DI
spring介绍、入门案例、控制反转IOC、IOC容器、Bean、依赖注入DI
Spring基础1——Spring(配置开发版),IOC和DI
|
XML Java 数据格式
Spring.Net——理解控制反转和依赖倒置
一,控制反转(Inversion of Control,缩写IoC)和依赖注入(Dependency Injection,简称DI)        1,控制反转                         IoC(Inversion of Control),这是spring的核心,贯穿始终。
1198 0
|
3月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
257 2
|
12天前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)