Spring项目的创建和使用-----实现代码解耦和自动化(直接用bean)
admin
2024-03-30 13:07:39
0

1.Spring框架的发展史

1)最早的Spring项目:2018年的老框架Spring框架,基于maven项目,这种Spring运行方式没有比Servlet有很大的优势(不明显),是需要用到Tomact来进行运行,也是需要到官方找jar包,引入依赖到pom.xml里面;

2)新的Spring项目:SpringBoot项目诞生了,去掉了外部Tomact,并不再使用XML,极大的简化了Spring的开发;

3)现在:2020年之后,还是基于Spring Boot,更先进的,Spring Cloud(基于Spring Boot)

通过前面的学习可知,Spring就是一个包含了众多方法的IOC容器,如果说是容器那么它就有两个功能;

1)将对象存储到容器里面

2)从容器中将对象取出来

在Java中,对象称之为bean

Spring的项目的创建和使用

1)创建Spring项目

2)将对象存储在Spring框架里面

3)将对象从Spring框架中读出来

1.创建maven项目

Name:项目名称

Location:本地目录,项目存储位置

GroupId:组织信息,域名的倒写(com.bit)

ArtifactId:项目Id

我们在现实中是靠GroupId和ArtifactId来进行确定一个唯一项目的,因为不同的公司可能会有相同的项目Id

Version:版本号(发布版本)(Tomact 8.5,Tomact 8.1)

2.在maven项目中引入Spring的核心包:上下文(SpringContext)-----在pom.xml和bean(做对象管理的一个jar包,SpringBeans)---彻底变成Spring项目(Spring-Bean)---去中央仓库找------不依赖于Tomact

在pom.xml里面存入的依赖

org.springframeworkspring-context5.2.3.RELEASE

org.springframeworkspring-beans5.2.3.RELEASE

 Spring的上下文:

3.创建启动类,是为了测试spring核心功能,存对象和取对象,我们直接进行创建一个类,里面写一个main方法,当前类启动的时候,咱们的框架也启动了(因为这个类是放在框架里面的,而咱们的框架是Spring框架,也就是说启动此类的时候,那么Spring框架也就随之启动);

4)先进行创建一个业务对象

5)把业务对象存放到Spring框架之中,在resource里面创建一个xml文件,使用声明式注册的方式来插入到Spring里面,创建标签,里面再进行创建bean对象

6)从Spring框架中读取业务对象,先创建上下文对象,实现对Spring的控制

将Bean添加存储到Spring中-------详解

1)先在Spring项目中添加配置文件-------放在resources目录下(在里面创建一个XML文件)

2)创建Bean对象(创建一个普通的JAVAClass文件)

3)在配置文件里面需要将需要保存在Spring中的Bean对象进行注册,存对象是依靠Key-Value这样的键值对来进行存储的,Key就是我们自定义的ID名字,Value就是我们实际上面的Bean对象,后续取出对象的时候,直接通过ID来进行取就可以了

4)Map,存入的Class类>,这里面的ID和类名没啥关系,这里面的ID没啥规范,大小写都是可以的

在resources目录下的xml文件放下面这些代码


将HelloSpring类存入到Spring里面,将一个对象存入到Spring里面

1)保存在Spring中的对象,将这个bean存入到Spring里面,所有托管于Spring中的对象,都会放到这里面
2)id是bean的标识符,后面进行读取对象的时候会用到,class是保存到Spring中的那个对象,将bean注册到框架里面 

在Spring中将对象取出来:

1)得到Spring的上下文对象(四种方式),因为我们的对象都交给Spring进行管理了,所以说想要获取对象就要从Spring中进行获取,那么就要先得到Spring的上下文对象,先拿到对应的Bean对象
2)通过Spring的上下文提供的方法,来进行获取到自己在XML中一个指定的Bean对象
3)使用Bean对象,调用里面的方法


public class HelloServlet {
当前类进行启动的时候,咱们的框架也进行启动了,因为这个类是存放在当前的框架里面的
但是咱们的框架是Spring框架,也就是说启动此类的时候咱们的Spring框架也就随之启动了public static void main(String[] args) {
1获取到Spring的上下文对象,获取到Spring框架
ApplicationContext context=new ClassPathXmlApplicationContext("web.xml");
2通过Spring的上下文对象和ID来进行获取到业务Bean,返回的是Object,这个对象这可不是new出来的
HelloSpring helloSpring=(HelloSpring)context.getBean("user");
2通过Spring上下文对象和类型来进行获取到业务对象,这里面就和ID没啥关系了HelloSpring helloSpring=context.getBean(HelloSpring.class);
2通过Spring上下文对象和类型加ID来进行获取到业务对象HelloSpring helloSpring=context.getBean("user",HelloSpring.class);
3使用bean对象
helloSpring.start();}

  获取到Bean对象的方法:

获取bean对象的方法:
1)只通过bean的ID来进行获取的,不足的地方就是需要进行强制类型转换,因为返回的是Object类型

HelloSpring helloSpring=(HelloSpring)context.getBean("user");
2)通过类名.class的方式来进行获取,这样做我们就不需要进行强制类型转换了,但是也有一个很大的缺点,对于多个对象的同一种类型Bean的获取会报错,把一个类型注册了两次,把一个Bean注册到了Spring两次,当同一个类型被注入到Spring多次之后,就会报错

 

  

 HelloSpring helloSpring=context.getBean(HelloSpring.class);
上面的代码就会报错,会抛出NoUniqueBeanDefinitionException异常,没有一个独一无二的Bean对象
3)我们此时就应该通过ID和类型来进行获取到Bean-----是第一种和第二种的一个综合
 HelloSpring helloSpring=context.getBean("user",HelloSpring.class);
 HelloSpring helloSpring1=context.getBean("user1",HelloSpring.class);
这样做的好处在于无需进行强制类型转换,况且对于多个对象指向一种类型的情况是不会报错的

1)Spring上下文对象.getBean(ID名字);

2)Spring上下文对象.getBean(存入类的类名.class)

3)Spring上下文对象.getBean(之前存入的ID名字,存入类的类名.class);

 获取到Spring上下文对象的方式和区别:

相同点:都可以从容器中获取到Bean对象,并且都是通过getBean()方法来进行获取,并且多个getBean()方法可以构成重载,通过ID获取,通过类名获取,通过ID+类名

1)ApplicationContext context=new ClassPathXmlApplicationContext("web.xml");
2)BeanFactory context=new ClassPathXmlApplicationContext("web.xml");
//这是Bean的创建工厂,BeanFactory是一个接口
3)BeanFactory context=new XmlBeanFactory(new ClassPathResource("web.xml"));
//里面传入的是XML文件里面的名字

1)从性能方面来看:ApplicationContext是一次性加载并初始化所有的Bean对象,不管这个bean对象是否拥有,是否要进行使用,都会在一启动的时候加载并初始化所有的bean对象(一开始启动的时候比较慢,但是在执行后续的操作的时候就会非常快)(访问的人比较多,一次全加载完了得了)--------对于第一次访问的用户响应速度非常快,不会管系统资源会进行浪费,也就是说当我们创建ApplicationContext对象的时候,在里面的构造方法写上配置文件的时候,要制定配置文件名字的时候,就已经加载所有的Bean对象了

2)但是BeanFactory需要使用到哪个类才会去加载那个类,进行初始化,会更加轻量(适用于项目比较小,比较有优势,当你去触发的时候,才会去执行,用谁加载时,不会造成资源的浪费,节省资源,在一开始启动的时候,占用的系统资源更少,启动的很快,但后续的执行访问速度可能会很慢;

其实就是在系统资源和性能上面做平衡

3)两者来自的Jar包不同,ApplicationContext来自于org.springframework.context.ApplicationContext这个包底下,但是BeanFactory来自于 org.springframework.beans.factory.BeanFactory;

4)从继承关系和功能方面来说,Spring容器有两个最顶级的接口:BeanFactory和ApplicationContext,其中的BeanFactory提供了基础访问Bean的能力,但是ApplicationContext属于BeanFactory的子类,ApplicationContext除了继承于BeanFactory的所有功能之外,ApplicationContext还具有独特的特性,还添加了对国际化的支持,资源访问支持,以及事件和传播等方面的支持;

总结:

1)创建Spring项目:

1)创建一个maven项目

2)添加Spring框架支持

3)添加启动类

2)存储Bean对象

1)存储Bean之前,首先要有Bean,所以我们需要先创建一个Bean,注册到配置文件里面

2)将创建的Bean注册到Spring容器里面

3)获取并使用Bean对象:

1)先得到Spring的上下文对象,因为对象都交给Spring管理了,所以获取对象的时候,要从Spring中进行获取,那么就必须先得到Spring的上下文

2)先通过Spring的上下文,得到一个指定的Bean对象

3)使用Bean对象

相关内容

热门资讯

春节家宴C位:八宝饭的甜蜜寓意... 八宝饭,这道以糯米为基底、缀满各色干果的甜点,自唐宋时期“宫廷八宝羹”演变而来,如今稳坐春节家宴“C...
湘菜在广州为什么做到这么火?湘... 在广州这座汇聚天下美食的城市,餐饮江湖可谓风云变幻、竞争激烈。然而,湘菜却能在众多菜系中异军突起,呈...
苦瓜炒鸡蛋时,很多人跳过了“这... 夏天来了,气温高,天气热,我们要学会调整饮食,少吃一些上火的食物,每天吃得清淡一些,尽量不吃辛辣食物...
原创 平... 平度特产十大名吃,舌尖上的胶东风情你尝过几样? 平度人最骄傲的十大名吃,当属热拌凉、南村煎包、店子火...
创意的椅子设计 创意的椅子设计   我们都知道椅子可以不仅仅用于供人休息,除了提供座位之外,还可以挂放衣物和包之类的...
急~古代诗词中“美人”这个意象... 急~古代诗词中“美人”这个意象的含义是什么?一指:美人 二指:美好的事物 三指:远大的抱负和理想不...
求这本穿越小说的名字 求这本穿越小说的名字讲的是女主去古玩街淘东西,买到了一个不知道是什么的东西,那个东西出来告诉女主还有...
求女帝藐视人的照片 求女帝藐视人的照片
运用先进典型对学生进行思想品德... 运用先进典型对学生进行思想品德教育这是德育的(    )。运用先进典型对学生进行思想品德教育这是德育...
十二星座的英文翻译 十二星座的英文翻译 十二星座英语名称(Zodiac) 白羊座3.21-4.19 ----Arie...
造纸术的英语怎么说 造纸术的英语怎么说造纸术1.paper-making2.papermaking3.paper-mak...
请教"西楼望月"的出处 请教"西楼望月"的出处寄李儋元锡 [韦应物] 去年花里逢君别,今日花开已一年。世事茫茫难自料,春愁...
《台阶》中作者从哪些方面来描写... 《台阶》中作者从哪些方面来描写父亲 找出文中对父亲细节描写的句子加以分析亲担水,“噔噔噔”,他很轻松...
婚纱相册用什么音乐好 婚纱相册用什么音乐好nothing's gonna change my love for you.我...
神墓好看吗? 神墓好看吗? 好看,去年出来的,已经先写完了。内容: 神魔陵园除了安葬着人类历代的最强者、异类中...
乒乓球新手应该如何选购乒乓球拍... 乒乓球新手应该如何选购乒乓球拍?如果是新手的话,建议买那种合成拍就行了,就是不需要自己把胶粘在板面上...
有人说学校要的是成绩,没有成绩... 有人说学校要的是成绩,没有成绩,老师在好也不行 怎么看这个问题?这个是这样子的,是牛娃创造了牛校,不...
在征途游戏中 开宝盒是怎么回事... 在征途游戏中 开宝盒是怎么回事 上哪里开 需要什么条件?30级以上的玩家都可以开。还有就是要钱。首先...
这个方程我解不出来 学霸请指教 这个方程我解不出来 学霸请指教设宽为x,长为2x(x+2)(2x+4)=2882x²+8x+8-28...
长期离婚不离家的后果 我为了孩... 长期离婚不离家的后果 我为了孩子忍受了很多委屈  我跟前夫虽然已经离婚了,但是为了孩子的成长,我们并...