Spring学习总结(一)入门

Spring学习总结(一)入门

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

版权声明:本文为博主学习后总结的原创文章,未经博主允许不得转载。如需转载请标明原博地址:https://blog.csdn.net/m0_37898659/article/details/82631020

一、Spring的概述

1、什么是Spring

这里写图片描述

  • Spring:SE/EE开发的一站式框架。

    • 一站式框架:有EE开发的每一层解决方案。

      • WEB层 :SpringMVC

      • Service层 :Spring的Bean管理,Spring声明式事务

      • DAO层 :Spring的Jdbc模板,Spring的ORM模块

2、为什么学习Spring

这里写图片描述

3、常用Spring的版本

        Spring3.x和Spring4.x

二、Spring的入门(IOC)

1、什么IOC

  • IOC: Inversion of Control(控制反转)。

    • 控制反转:将对象的创建权反转给(交给)Spring。

2、下载Spring的开发包

官网:http://spring.io/

2、解压Spring的开发包

这里写图片描述
– docs :Spring的开发规范和API
– libs :Spring的开发的jar和源码
– schema :Spring的配置文件的约束

3、创建web项目,引入jar包

这里写图片描述

这里写图片描述

下面四个是Spring基本包
上面两个是日志包

4、创建接口和类

这里写图片描述

这里写图片描述

  • 问题:

    • 如果底层的实现切换了,需要修改源代码,能不能不修改程序源代码对程序进行扩展?

这里写图片描述

5、将实现类交给Spring管理

在spring的解压路径下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html

这里写图片描述

6、编写测试类

这里写图片描述

7、IOC和DI(*****)

  • IOC:控制反转,将对象的创建权反转给了Spring。

    • DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。
  • 面向对象的时候

    • 依赖

Class A{
}

Class B{

public void xxx(A a){

}

}

  • 继承:is a

Class A{

}

Class B extends A{

}

  • 聚合 : has a

例如:

这里写图片描述

这就说明这个类依赖了一个字符串类型的name属性,传统方式给这个属性传值,就必须变成具体的实现类,才能用set赋值。这样子不仅是不能面向接口编程了,还必须修改源代码进行赋值。

这里写图片描述

但是如果使用spring就不一样了。可以直接通过配置文件进行配置依赖属性

这里写图片描述

这就叫做DI,在spring管理这个类的时候把这个类的属性给你设置进来。

三、Spring的工厂类

1、Spring工厂类的结构图

这里写图片描述

  • ApplicationContext继承BeanFactory。

2、BeanFactory :老版本的工厂类

  • BeanFactory:调用getBean的时候,才会生成类的实例。

3、ApplicationContext :新版本的工厂类

  • ApplicationContext:加载配置文件的时候,就会将Spring管理的类都实例化。

  • ApplicationContext有两个实现类

    • ClassPathXmlApplicationContext :加载类路径下的配置文件

    • FileSystemXmlApplicationContext :加载文件系统下的配置文件

这里写图片描述

四、Spring的配置

1、XML的提示配置

(1)Schema的配置

这里写图片描述

2、Bean的相关的配置

(1) <bean>标签的id和name的配置

  • id :使用了约束中的唯一约束。里面不能出现特殊字符的。
  • name : 没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现的)。里面可以出现特殊字符。

(2) Bean的生命周期的配置(了解)

  • init-method :Bean被初始化的时候执行的方法

  • destroy-method :Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)

(3) Bean的作用范围的配置(重点)

  • scope :Bean的作用范围

    • singleton :默认的,Spring会采用单例模式创建这个对象。

    • prototype :多例模式。(Struts2和Spring整合一定会用到)

    • request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。

    • session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。

    • globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。

五、Spring的Bean管理(XML方式)

1、Spring的Bean的实例化方式(了解)

Bean已经都交给Spring管理,Spring创建这些类的时候,有几种方式:

无参构造方法的方式(默认)

  • 编写类

这里写图片描述

  • 编写配置

这里写图片描述

2、静态工厂实例化的方式

  • 编写Bean2的静态工厂

这里写图片描述

  • 配置

这里写图片描述

3、实例工厂实例化的方式

  • Bean3的实例工厂

这里写图片描述

  • 配置

这里写图片描述

六、Spring的属性注入

1、构造方法的方式的属性注入

  • 构造方法的属性注入

这里写图片描述

2、Set方法的方式的属性注入

  • Set方法的属性注入

这里写图片描述

  • Set方法设置对象类型的属性

这里写图片描述

3、P名称空间的属性注入(Spring2.5以后)

  • 通过引入p名称空间完成属性的注入:

    • 写法:

      • 普通属性 p:属性名=”值”

      • 对象属性 p:属性名-ref=”值”

  • P名称空间的引入

这里写图片描述

  • 使用p名称空间

这里写图片描述

4、SpEL的属性注入(Spring3.0以后)

  • SpEL:Spring Expression Language,Spring的表达式语言。

    • 语法:

      • #{SpEL}

这里写图片描述

5、集合类型属性注入(了解)

配置

<!-- Spring的集合属性的注入============================ -->
<!-- 注入数组类型 -->
<bean id=*"collectionBean"* class=*"com.itheima.spring.demo5.CollectionBean"/>
<!-- 数组类型 -->
<property name=*"arrs"*>
<list>
<value>王东</value>
<value>赵洪</value>
<value>李冠希</value>
</list>
</property>

<!-- 注入list集合 -->
<property name=*"list"*>
<list>
<value>李兵</value>
<value>赵如何</value>
<value>邓凤</value>
</list>
</property>



<!-- 注入set集合 -->
<property name=*"set"*>
<set>
<value>*aaa*</value>
<value>*bbb*</value>
<value>*ccc*</value>
</set>
</property>



<!-- 注入Map集合 -->
<property name=*"map"*>
<map>
<entry key=*"aaa"* value=*"111"*/>
<entry key=*"bbb"* value=*"222"*/>
<entry key=*"ccc"* value=*"333"*/>
</map>
</property>

</bean>

七、Spring的分模块开发的配置

1、分模块配置

(1)在加载配置文件的时候,加载多个

这里写图片描述

(2)在一个配置文件中引入多个配置文件

这里写图片描述

八、CRM的综合案例

1、创建web项目,引入jar包

  • 引入struts2的开发的jar包

  • 引入struts2的配置文件

  • web.xml中配置核心过滤器

这里写图片描述

  • struts.xml

2、引入页面

这里写图片描述

3、编写Action类

这里写图片描述

4、配置Action

这里写图片描述

5、修改页面提交到Action

这里写图片描述

6、编写Action的save方法

  • 不在Action中直接创建Service,将Service交给Spring管理。

  • 创建Service接口和实现类

这里写图片描述

这里写图片描述

7、引入Spring的环境

  • 引入jar包

  • 引入配置文件

8、将Service交给Spring

这里写图片描述

9、在Action中调用Service

这里写图片描述

10、编写DAO并且完成配置

  • 编写DAO的接口和实现类

这里写图片描述

这里写图片描述

  • 将DAO交给Spring管理

这里写图片描述

11、在Service中使用DAO

这里写图片描述

这里写图片描述

八、问题描述

程序出现的问题

  • 每次请求都会创建一个Spring的工厂,这样浪费服务器资源,应该一个项目只有一个Spring的工厂。

    • 在服务器启动的时候,创建一个Spring的工厂。

    • 创建完工厂,将这个工厂类保存到ServletContext中。

    • 每次使用的时候都从ServletContext中获取。

  • *****使用ServletContextListener

    • 监听ServletContext对象的创建和销毁。

解决方案:使用Spring核心监听器ContextLoaderListener(整合web项目)

  • 引入jar包

spring-web.jar

  • 配置监听器

这里写图片描述

  • 把applicationContext.xml放到WEB-INF目录下

  • 在Action中获取工厂

这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119799.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C++中double转string函数

    C++中double转string函数使用 stringStream 类 stringDouble doubled nbsp nbsp nbsp Need include nbsp nbsp nbsp usingnamespa nbsp nbsp nbsp stringstr nbsp nbsp nbsp stringstream nbsp nbsp nbsp ssd nbsp nbsp nbsp ssstr nbsp nbsp nbsp returnstr 返回的

    2025年8月8日
    2
  • 《书谱》(书法理论知识)

    ٩(๑•ㅂ•)۶  夫自古之善书者,汉魏有钟、张之绝,晋末称二王之妙。王羲之云:“顷寻诸名书,钟张信为绝伦,其余不足观。”可谓钟、张云没,而羲、献继之。又云:“吾书比之钟张,钟当抗行,或谓过之。张草犹当雁行。然张精熟,池水尽墨,假令寡人耽之若此,未必谢之。”此乃推张迈钟之意也。考其专擅,虽未果于前规;摭以兼通,故无惭于即事。  评者云:“彼之四贤,古今特绝;而今不逮古,古质而今研。”夫质以代兴,妍因俗易。虽书契之作,适以记言;而淳醨一迁,质文三变,驰鹜沿革,物理常然。贵能古不乖时,今不同弊,所谓“文质彬

    2022年4月13日
    41
  • linux 修改文件权限命令_linux给权限命令

    linux 修改文件权限命令_linux给权限命令查看文件权限ls-h命令修改文件权限修改方法1:(参数)命令:chomod语法:chomod[参数][augo][+-=][rwx]文件名例子:1.将文件file1.txt增加可读权限chmodugo+rfile1.txt2.将文件file1.txt设为所有人(all)可读chmoda=rfile1.txt3.为ex1.py文件拥有者取消可执行权限chmodu-xex1.py修改方法2:(数字)命令:chmod语法..

    2025年10月31日
    2
  • LDR命令

    LDR命令  LDR指令用于从内存中将一个32位的字读取到指令中的目标寄存器中,如果目标寄存器为PC,则可以实现“长”跳转。主要有一下3种方式使用:ldrr0,_startldrr0,=_startldrpc,_start  逐条分析:一、ldrr0,_start  从内存地址_start的地方,把其对应的命令执行对应的“执行码”读入到r0中。二、ldrr0,=_start  …

    2022年6月28日
    81
  • MAC电脑用adb命令安装APK

    MAC电脑用adb命令安装APK目录开始过程结果开始分别在命令行里面输入以下命令:touch.bash_profileopen-e.bash_profilesource.bash_profileadbversion过程这个时候会弹出一个这种框需要你配置路径比如我的路径是这个命令:exportPATH=${PATH}:–…

    2022年6月1日
    87
  • 初识VMM_vmem是什么意思

    初识VMM_vmem是什么意思三篇文章就VMM、虚拟机和容器的性能比较作了详细介绍对以下问题予以解决:如何虚拟化操作系统下的机器大多数现代CPU架构的设计都不是可虚拟化的如何在无法虚拟化的cpu上实现VMM。虚拟化让一台机器上可以运行多种操作系统类型和版本,文章通过讨论Disco的基本技术,了解虚拟化工作机制。要在虚拟机监视器上运行虚拟机所使用的基本技术是有限的直接执行,也就是操作系统如何虚拟化CPU…

    2022年9月22日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号