[Spring]第二篇:IOC控制反转
创始人
2024-04-14 20:43:10
0

简单的说就是,创建对象的权利,或者是控制的位置,由JAVA代码转移到spring容器,由spring的容器控制对象的创建,就是控制反转.

  1. spring创建对象时,会读取配置文件,配置文件中主要配置接口和实现类的关系,每个接口对相应一个实现类,使用标签配置,)中的信息,然后使用反射给我们创建好对象
  2. 创建好之后在容器(这个容器里放的是map集合,key为接口id,value为所对应的实现类)中存储起来,当我们需要某个对象时,通过id(集合的key)获取对象即可,不需要我们自己去new.如果要使用别的实现类,只需要在配置文件中修改实现类的路径名,不用修改代码

一句话:创建对象交给容器,用的时候再去容器中取

Spring解耦合的原理
图解:

一.简单使用IOC 

 1.创建maven项目,设置maven
先创建一个空项目

2.名字可以是spring_all

 在项目下创建模块 名字可以是spring_test_01

 

 3.pom.xml中导入spring依赖

org.springframeworkspring-core5.3.5org.springframeworkspring-beans5.3.5org.springframeworkspring-context5.3.5org.springframeworkspring-expression5.3.5

四个依赖介绍

  • spring-context      上下文,容器
  • spring-beans         创建对象
  • spring-core            核心jar
  • spring-expression 表达式jar

但是事实上,我们导入spring-context的时候,会自动导入其他依赖的jar,自动进行了依赖传递
所以,导入一个spring-context 依赖也可以

4.为了方便测试,我们导入Junit测试依赖

        junitjunit4.13.1test

5.在项目中定义一个接口和实现类,接口中定义一个方法并在实现类中实现接口

EmpDao接口和实现类

 6.在spring配置容器中的对象,创建spring配置文件, 文件名没有明确要求,暂时可以叫spring

 

7.在spring.xml中配置一个需要由容器初始化的对象

 8.测试通过容器获取对象

 二.IOC底层原理和实现步骤

1 XML解析技术读取配置文件

将上面的信息读取进入程序  对象的ID ,一个是对象的类的全路径名

2 反射技术实例化对象,放到容器中

  1. 获得类的字节码:Class clazz =Class.forName("com.msb.dao.impl.EmpDaoImpl")
  2. 通过字节码实例化对象:Object obj  = clazz.newInstance();
  3. 将对象放到一个map集合中:map.put("empDao",obj)

3工厂模式返回Bean对象

使用getBean方法,getBena方法是BeanFactory 父接口下的一个方法,但一般我们使用ApplicationContext 接口去调用这个方法
               

  public Object getBean(String name){Object obj =map.get(name);return obj;} 

IOC接口有两个

  1.  BeanFactory  接口: IOC容器基本功能接口,是spring内部使用的接口,我们在处理业务时一般不直接使用该接口
  2.   ApplicationContext 接口: BeanFactory的子接口,提供更多更强大的功能,研发人员一般使用的接口

接口下的实现类

三 Spring中的Bean管理(面试常问)

spring中的Bean的管理:
Bean(汉译咖啡豆). 又称JAVABean.其实就是JAVA程序程序中的一个个对象,所以Bean的管理其实就是spring对于JAVA程序中的对象的管理

管理的内容是什么:

管理了两部分,第一部分是对象的创建  也就是我们所说的 IOC,第二部分是属性的赋值  也就是我们所说的 DI, 先创建完属性才能赋值

1 对象的创建   IOC
IOC   叫做控制反转,就是Spring给我们创建对象,然后我们直接用,不用自己NEW,前面已经解释过
IOC处理的是对象如何创建的问题

2 属性的赋值   DI
DI   :(Dependency Injection),即“依赖注入” 就是创建属性时给对象属性赋值
对象功能的实现往往要依赖属性的值,那么给对象属性赋值就可以说成是依赖注入
由于对象属性不仅仅是基本数据类型,还可能是其他类,或者引用类型
那么依赖注入将会把更多的对象之间的关系整理到一起,可以行程一个庞大的依赖关系
DI处理的是对象的属性赋值和互相依赖的关系
3.spring给我们提供了两种关于bean的方式

1 基于XML方式的Bean管理

2 基于注解方式的Bean管理

四 测试基于XML方式的Bean管理

1.创建新的模块并导入以下依赖

 

依赖

       

org.springframeworkspring-context5.3.5junitjunit4.13.1test

2.创建spring配置文件,一般spring的配置文件很多人约定俗称为application****.xml

 

3.准备一个要实例化的类

public class User {private Integer userid;private String username;private String password;@Overridepublic String toString() {return "User{" +"userid=" + userid +", username='" + username + '\'' +", password='" + password + '\'' +'}';}public User() {System.out.println("noArgConstructor");}public User(Integer userid, String username, String password) {System.out.println("allArgConstructor");this.userid = userid;this.username = username;this.password = password;}public void setUserid(Integer userid) {System.out.println("setUserid");this.userid = userid;}public void setUsername(String username) {System.out.println("setUsername");this.username = username;}public void setPassword(String password) {System.out.println("setpassword");this.password = password;}
}

4.IOC创建对象:通过无参构造方法构造对象

 

标签的常见属性

 

  • id    对象的id
  • class 类的全路径名
  • name 和id类似,一般不用
  • scope 控制对象单例多例和使用范围   ,包含以下5个属性
  1.   singleton作用域(scope 默认值), Spring IOC容器中只会存在一个共享的bean实例
  2.   prototype作用域部署的bean,每一次获取都会产生一个新的bean实例,相当与一个new的操作
  3.     request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
  4.     session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
  5.     global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义
  • lazy-init 懒加载 调用getBean的时候再去实例化对象

以上主要是SpringIOC的IOC内容,后续会持续更新DI部分,以及AOP部分

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...