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

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对象

相关内容

热门资讯

延安旅游攻略:一家老小5口人,... 每到暑假或国庆长假,总有很多家庭游客向我们咨询:“我们一家老小来延安,有老人有孩子,行程该怎么安排才...
原创 韩... 韩国明星到延吉旅游,第一次挑战吃羊鞭,惊得嘴都合不上了! 全昭旻等人在延吉录制节目,刚到延吉,他们...
国庆黄金周景区情况:大同古城半... 文| 芙昕 编辑 | 芙昕 国庆长假,很多人都计划着出门走走,可一到了那些热门景点,看到的往往不是山...
来大东北一共分两步:先“冷藏”... 还在被“东北=冰窖”的刻板印象吓退? 南方的“小土豆”们 别急着裹紧小棉袄 这个冬天 让“气候缓冲带...
第三届“长城之约”活动在河北涞... 11月15日,第三届"长城之约"全球推广活动暨世界文化遗产对话15日在河北省保定市涞源县启幕。 本次...