认识Spring(上)
创始人
2024-05-28 15:09:21
0

作者:~小明学编程 

文章专栏:Spring框架

格言:热爱编程的,终将被编程所厚爱。
在这里插入图片描述

目录

什么是spring

什么是IOC

传统开发

IOC

DI

spring的创建使用

pom.xml

spring.xml

取出bean对象

ApplicationContext

BeanFactory

ApplicationContext 和 BeanFactory 的区别


今天开始给大家带来一些关于spring框架的知识,这里要迎接我的新篇章了。

什么是spring

Spring 是指 SpringFramework,就是 Spring 框架,可以让 Java企业级 的应用程序开发起来更简单。有一句话概括起来就是:Spring 是包含了众多工具方法的 IoC 容器。容器就是容纳某种物品的装置。像 List/Map 就是数据存储的容器。Tomcat 就是 web容器。

什么是IOC

前面我们了解了spring就是包含众多工具的Ioc容器那么什么是IOC呢?

IoC 就是 Inversion of Control ,就是 “控制反转” 。控制反转 是两个词:控制+反转。指的是:之前程序的控制权限是在我们自己手上,现在,我们把这个控制权交出去了。

传统开发

下面通过一个例子来给大家说说什么是控制反转:

就拿我们造车来说:我们想要一辆车就必须得有车身,然后车身的大小需要依赖我们车地盘的大小,最后车地盘的大小可能要取决于轮胎的大小。

 如果我们用代码来表示的话就是下面这样子:

public class NewCar {public static void main(String[] args) {Car car = new Car();car.init();}/*** 汽车对象*/static class Car {public void init() {// 依赖车身Framework framework = new Framework();framework.init();}}/*** 车身类*/static class Framework {public void init() {// 依赖底盘Bottom bottom = new Bottom();bottom.init();}}/*** 底盘类*/static class Bottom {public void init() {// 依赖轮胎Tire tire = new Tire();tire.init();}}/*** 轮胎类*/static class Tire {// 尺寸private int size = 30;public void init() {System.out.println("轮胎尺寸:" + size);}}
}

其关系就是上层的对象需要new一个下层的对象,这个时候就会产生一个问题,如果我们的轮胎想要增加属性的话就需要更改我们的每一个类,这样的话代码的耦合性就太高了,我们需要的是一个低耦合的代码,所以这个时候我们就可以将控制权给反转过来。由原先的车需要车身,车身需要车地盘,车底盘需要车轮胎最后变成把车轮胎给车地盘,再将车地盘交给车身,最后将车身交给车。

IOC

这么一来的话我们想要改变轮胎的话那就直接改变然后交给车地盘就好了。

代码如下:

public class NewCar {public static void main(String[] args) {Tire tire = new Tire(50, "红色");Bottom bottom = new Bottom(tire);Framework framework = new Framework(bottom);Car car = new Car(framework);car.run();}static class Car {private Framework framework;public Car(Framework framework) {this.framework = framework;}public void run() {framework.init();}}static class Framework {private Bottom bottom;public Framework(Bottom bottom) {this.bottom = bottom;}public void init() {bottom.init();}}static class Bottom {private Tire tire;public Bottom(Tire tire) {this.tire = tire;}public void init() {tire.init();}}static class Tire {private int size;private String color;public Tire(int size, String color) {this.size = size;this.color = color;}public void init() {System.out.println("轮胎:" + size + " | 颜色:" + color);}}
}

 这样我们就理解了我们为什么需要ioc的容器了,因为我们需要将我们的类给放在一个特定的容器中然后再给取出来。

DI

IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。理解了IoC和DI的概念后,一切都将变得简单明了,剩下的工作只是在spring的框架中堆积木而已。

spring的创建使用

创建spring项目的时候我们需要去引入相关的依赖,然后我们才能够去使用。

pom.xml

    org.springframeworkspring-context5.2.3.RELEASEorg.springframeworkspring-beans5.2.3.RELEASE

spring.xml



因为我们的bean对象要放在spring中所以这里要创建一个beans来存放我们bean对象,其中的id和class类似于一种键值对的关系。

 可以看到这里我们就相当于把我们的对象放在了spring容器中去了,在我们放完之后接下来就是要想办法将我们的对象从容器中给取出来了。

取出bean对象

ApplicationContext

public static void main(String[] args) {//1.得到spring上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");//2.根据上下文提供的方法获取到bean
//        UserBean userBean = (UserBean) context.getBean("user");
//        UserBean userBean = context.getBean(UserBean.class);UserBean userBean = context.getBean("user",UserBean.class);//3.使用userBean.print();}

首先我们会获取一个上下文的对象,这也是我们前面所创建的资源里面的文件名,接下来就是获取里面的bean对象了,我们有三种方式,第一种是给一个user也就是我们的key值,当时这种方式需要我们的强制类型转换。第二种是直接输入我们的类对象,这种方式虽然不用进行强制类型的转换但是当我们注入多个对象的时候会报错。第三种方式是我们最常用的方法也是最安全的。

BeanFactory

通过BeanFactory也可以获取我们的上下文的依对象

public static void main1(String[] args) {//1.得到spring上下文对象BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring.xml"));//根据上下文提供的方法获取到beanUserBean userBean = (UserBean) context.getBean("user");//3.使用userBean.print();}

ApplicationContext 和 BeanFactory 的区别

相同点:都实现了从容器中获取 Bean,都提供了 getBean 方法。
不同点:
a)ApplicationContext 属于 BeanFactory 的子类。
b)BeanFactory 只提供了基础访问 Bean 的方法。而 ApplicationContext 除了拥有 BeanFactory 的所有功能之外,还提供了更多的方法实现,比如对国际化的支持,资源访问的支持,以及事件和传播等方面的支持。
c)从性能方面来说二者是不同的,BeanFactory 是按需加载 Bean,而 ApplicationContext 就是全部加载,以备之后使用。对于用户来说肯定是想要第二种这样可以节约时间的开销嘛。

相关内容

热门资讯

高考满分作文好句摘抄【通用3... 高考满分作文好句摘抄 篇一第一篇内容高考是每个学生都无法绕开的一道坎,它是一次考验也是一次机遇。在高...
高考预测作文:期待,生命不合... 高考预测作文:期待,生命不合理是可能的 篇一期待,生命不合理是可能的生命是一个奇妙而不可预测的旅程,...
光头的背后:《非诚勿扰》孟非... 光头的背后:《非诚勿扰》孟非 篇一在中国的相亲节目中,《非诚勿扰》无疑是最受欢迎的一档。而这档节目的...
冲刺高考励志作文【推荐6篇】 冲刺高考励志作文 篇一奋斗的力量高考,是每个学生心中的一块巨石。在这个关键的阶段,每个人都希望能够以...
浙江高考满分作文:人生应读三... 浙江高考满分作文:人生应读三本书 篇一人生应读三本书在我们的一生中,书籍扮演着重要的角色,它们不仅是...
高考满分议论文【精彩6篇】 高考满分议论文 篇一高考满分:是成功的唯一标准吗?高考作为我国教育体制的重要组成部分,一直以来备受争...
北京市高考作文题【推荐3篇】 北京市高考作文题 篇一互联网时代下的人际关系互联网的发展给人们的生活带来了很多便利,但同时也对人际关...
高考满分作文:浅阅读与深阅读... 高考满分作文:浅阅读与深阅读 篇一浅阅读与深阅读在当今信息爆炸的时代,我们每天都面临大量的文字信息。...
高考素材之古诗词中“酒”的名... 高考素材之古诗词中“酒”的名字 篇一古代诗词中,酒是一个常见的题材,它象征着欢乐、快乐和人情味道。下...
江苏高考作文题目:车来车往折... 江苏高考作文题目:车来车往折射社会真理 篇一车来车往 折射社会真理车来车往,车辆穿梭于城市的大街小巷...
浙江高考满分作文:门与路(通... 浙江高考满分作文:门与路 篇一门与路,是生活中不可或缺的元素。门是通往不同世界的通道,而路则是连接一...
高考教室标语(最新3篇) 高考教室标语 篇一高考教室标语对学生的激励作用高考是每个学生都必须面对的一道坎,而高考教室则是他们备...
全国卷一作文【优质3篇】 全国卷一作文 篇一:如何培养孩子的创造力创造力是现代社会对于个体发展的重要要求之一。而培养孩子的创造...
2022年江苏新高考I卷作文... 2022年江苏新高考I卷作文 篇一新高考改革下的多元化教育模式探析 2022年江苏新高考I卷作文 篇...
2022高考作文围棋范文【优... 2022高考作文围棋范文 篇一围棋与我的成长围棋是一门古老而深奥的智力游戏,它给了我许多启示和帮助,...
高考零分作文出:我的共享幸福... 篇一:高考零分作文出:我的共享幸福计划近年来,共享经济在我国发展迅速,各种共享平台如雨后春笋般涌现。...
天津高考作文题【精选3篇】 天津高考作文题 篇一我心中的天津天津,这座位于华北地区的城市,是我生活了十几年的家。它不仅是中国的直...
高考作文素材积累【最新3篇】 高考作文素材积累 篇一高考作文素材积累是每个高中生备战高考时必备的一项重要任务。作文是高考语文科目中...
高考满分作文800字【精简6... 高考满分作文800字 篇一我的高中生活高中三年,如同一场华丽的冒险,我在其中探索着自我、成长着、收获...
成人高考作文(精彩6篇) 成人高考作文 篇一:教育的重要性教育是人类社会发展的重要基石,也是个人成长的关键因素。随着社会的进步...