每天一点儿时间学习Spring框架——Ioc(2)

前篇简单入门了Spring的结构,这次就来开始讨论其中的控制反转的思想和自己的一些编写实例分享。(编写不一定能够完美的实现,建议大家了解其中的基本步骤结合自身学习即可。谢谢大家!!)

1、 Ioc控制反转

1.1 控制反转的概念

在我们一般写java代码时,都会使用new一个对象出来。比如说要进行算术就要new一个math出来。这些都是由调用者自己操作控制的。

而控制反转的意思在于这些控制权由程序代码转移到了Spring容器中,控制权发生了反转。这就是Spring Ioc的思想。

我们可以打个比方。在我们自己使用java web时,通常需要使用servlet。但是我们在使用idea只要直接extends后选择dogetdoPost方法即可。按理来说我们一般写代码都需要以对象.方法的格式进行使用,但是我们在使用doget或者dopost时,我们配置的tomcat可以直接通过方法返回到对象中去,知道程序员要使用的是servlet。此时我们可以把tomcat在这里当成是一种容器。

2、Spring容器使用示例

2.1 创建一个Maven项目

如上图所示,代码的编辑器目录展示。

2.2 添加依赖和插件

<dependencies><!--单元依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!--spring依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.13.RELEASE</version></dependency></dependencies><!--编译插件--><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>

首先添加了junit单元的用于编译依赖,创建了Spring依赖还有插件的配置编译。

2.3 创建实体类

在创建完如上的配置后,进行实体类的创建以感受控制反转的概念,即IOC概念。

这里文章来编写一个实体类出来。

package com.jpg;
public class project {private String id;private String name;private String location;public project(){System.out.println("我的默认构造方法被调用!!"+",id="+id+",name"+name+",location="+location);}
}

2.4 创建Spring的配置文件application.xml

2.5 在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"></beans>

xml中的语句中,如果我们要配置时可以进行如下创建。

spring的配置文件:

  1. beans: 根标签,springjava的对象成为bean
  2. spring-beans.xsd 是约束文件(约束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="project1" class="com.jpg.project"></bean>
</beans>

beans下创建一个bean标签,写下之前创建实体类的路径并设置id。如上代码块表示即可。

2.6 获取Spring容器

Spring中提供了两种LoC容器:BeanFactoryApplication

2.6.1 BeanFactory

BeanFactory是基础类型的LoC容器,它就是管理Bean的工厂。它的任务就是负责初始化各种Bean并调用它们的生命周期方法。

其中介绍BeanFactory接口,它有多个实现类。其中最常见的是:

org.Springframework.beans.factory.xml.XmlBeanFactory:它根据 XML 配置文件中的定义装配 Bean

BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource(Spring配置文件的名称));

2.6.2 ApplicationContext

ApplicationContextBeanFactory的子接口,也被称为应用上下文。它除了提供BeanFactory的所有功能,还添加了i18n国际化、资源访问、事件传播等方面的良好支持。

其中,ApplicationContext接口有两种常用的实现类:

2.6.2.1 ClassPathXmlApplicationContext——常用

该类从类路径ClassPath中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。

ApplicationContext applicationContext=new ClassPathXmlApplicationContext(Spring配置文件的名称);
2.6.2.2 FileSystemXmlApplicationContext
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);

它与 ClassPathXmlApplicationContext 的区别是:在读取 Spring 的配置文件时, FileSystemXmlApplicationContext 不再从类路径中读取配置文件,而是通过参数指定配置文件的位置。它可以获取类路径之外的资源,如“D:\application.xml”

总结:一般而言使用的第一种,即ClassPathXmlApplicationContext最常用。因为从类路径中获取通常对于大部分人的学习都比较方便;当然其他的类调用都可以使用,大家日后学习工作主要根据自己习惯即可。

2.7 通过上下文对象获取容器中的对象

根据如上自定义创建一个测试类,调用如上方法之一并使用之前创建好的xml文件。调试运行。

package com.jpg.test;
import com.jpg.project;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.FileSystemResource;
import java.util.Date;
public class Test1 {@Test
public void test01(){//使用spring容器创建对象//1、指定spring配置文件的名称String springConfig="application.xml";//2、创建spring容器的对象://applicationContext--常用ApplicationContext applicationContext=new ClassPathXmlApplicationContext(springConfig);//这里执行完毕容器中的对象都已经创建完成//3、获取容器中的对象project pro= (project) applicationContext.getBean("project1");//4、容器其他apiint beanDefinitionCount = applicationContext.getBeanDefinitionCount();System.out.println("spring容器中对象的个数:"+beanDefinitionCount);String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();System.out.println("spring容器中所有对象的名称:");for (String name : beanDefinitionNames) {System.out.println(name);}}
}

在上面步骤完成后编写测试类,测试类上步骤如下:

  1. 指定配置xml文件
  2. 根据自身创建spring容器
  3. 获取容器中的对象
  4. 容器中其他API的搭配使用

这样子以上的Spring的容器使用就大功告成了。

3、创建非自定义实例

pox.xml文件中补充
<!--创建非自定义的对象-->
<bean id="date" class="java.util.Date"></bean>

如上面步骤所示,创建测试类如下表示

Date date1= (Date) applicationContext.getBean("date1");
System.out.println("日期:"+date1);

此时能够看出,在创建非自定义时候较自定义的简洁。

4、bean标签的属性

在上面我们使用了id属性和class属性,这一次我们来介绍其他的属性标签

属性 说明
class 指定bean对应类的路径
name namebean对应对象的标识
scope 执行bean对象创建模式和生命周期
id id是bean对象的唯一标识
lazy-init 是否延时加载 默认值:false。
init-method 只需要加载配置文件即可对象初始化方法
destroy-method 对象销毁方法

以上就是个人的实例小技巧,以方柏霓大家了解控制反转IOC的概念。接下来后续会继续编写依赖注入DI和通过注解的方式进行实现Ioc。谢谢大家

每天一点儿时间学习Spring框架系列—IOC(2)相关推荐

  1. Spring框架系列之AOP思想

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.AOP概述 (1).什么是 AOP AOP 为 Aspect Oriented Progra ...

  2. 2019 年起如何开始学习 ABP 框架系列文章-开篇有益

    阅读文本大概需要 3.3 分钟. 本系列文章推荐阅读地址为:52ABP 开发文档https://www.52abp.com/Wiki/52abp/latest/Welcome-to-52abp 本文的 ...

  3. 深入学习Spring框架(二)- 注解配置

    1.为什么要学习Spring的注解配置? 基于注解配置的方式也已经逐渐代替xml.所以我们必须要掌握使用注解的方式配置Spring. 关于实际的开发中到底使用xml还是注解,每家公司有着不同的使用习惯 ...

  4. 学习Spring框架有这一篇就够了

    目录 一.Spring框架 1.什么是Spring 2. 为什么使用spring 3.程序的耦合 4.解决办法IOC控制反转 二. 如何使用spring 1.Spring程序开发步骤 2.使用spri ...

  5. SSM—Spring框架,IOC理论推导,Hello Spring,IOC创建对象方式,Spring的配置,DI(依赖注入)

    文章目录 1.Spring 1.1.Spring简介(了解) 1.2.spring优点 1.3.组成(七大模块) 1.4.拓展 2.IOC理论推导 2.1.IOC本质 3.Hello Spring 4 ...

  6. (精简)Spring框架的IoC(替代工厂类实现方法)和AOP(定义规则,约定大于配置)

    Spring的核心框架主要包含两个技术,分别用来处理工厂类,以及事务处理和连接管理的. 两大核心概念 1)  IoC:控制反转,在现在的开发中,如果想建立对象并设置属性,是需要先new对象,再通过se ...

  7. Spring框架中IoC(控制反转)的原理

    一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑.即软件系统中对象之间的耦合,对 ...

  8. Spring框架,IOC,DI,AOP,单例多例,懒加载

    文章目录 1.Spring 2.IOC 2.1 什么是IOC 2.2 xml配置文件管理对象 2.3 全注解的方式管理对象 3.Spring创建对象-工厂模式(必会内容) 4.单例与多例 4.1@Sc ...

  9. 深入学习Spring框架之一Spring的简要概括

    Java开发的春天 Spring框架最初的形成,来自于最初的一位Java领域的大牛-----Rod Jahnson.这位大牛所著的一本叫做<Expert One-on-One J2EE Desi ...

最新文章

  1. python查询缺失值所在位置使用scipy_python – 使用缺失值计算scipy中的成对距离
  2. 干货 | 当 YOLOv5 遇见 OpenVINO,实现自动检测佩戴口罩
  3. 代码缺陷导致 CloudFlare 泄露大量客户站点的密码等私密信息
  4. php empty详解
  5. 解决Vs输出中文乱码的问题
  6. Equinix 位于伦敦的LD8数据中心发生严重故障
  7. 怎么在mac下运行映像dmg_仅用Mac OS X系统映像文件(dmg)安装系统
  8. vue实现多行数据提交_2020年大厂面试指南 Vue篇
  9. shell 函数的高级用法
  10. python连不上树莓派_Python实现树莓派WiFi断线自动重连
  11. 【Flink】Flink 启动报错 DirectoryNotEmptyException Could not close resource
  12. 接口测试--apipost变量使用(一)
  13. oracle的sql的substr用法,oracle中substr函数的用法(sqlserver right)
  14. 网络带宽与实际上传下载速度之间关系
  15. MkDocs项目文档生成器(一)
  16. 集成 push kit 签名配置报6003/收不到华为推送
  17. #344 – 通过CanExecute控制按钮是可用(The CommandBinding CanExecute Determines Whether a Button is Enabled)
  18. Illegal character in opaque part at index
  19. 学习java怎么样?后期能挣钱吗?
  20. python 手动读取cifar10_如何用python解析cifar10数据集图片

热门文章

  1. php手机短信接口发送验证码
  2. 【牛客网】小白月赛16 H 小阳的贝壳
  3. BK7256,上海博通-FreeRtos平台,智能家居中控屏,旋钮屏等方案介绍
  4. HP580服务器系统安装,hp580服务器配置
  5. Matlab机器人工具箱
  6. python脚本备份linux,linux利用bypy自动备份文件上传百度云
  7. 塔望食品品牌策划:内卷时代,食品品牌如何命名?
  8. The Python IDE for Professional Developers - PyCharm 安装
  9. Linux系统安装常遇到的问题,linux 安装遇到的问题和解决
  10. Unity3D 人称设置(第一人称视角、第三人称视角)