【SSM面向CRUD编程专栏 1】Spring简介 xml配置文件 依赖注入 数据注入

举报
扎哇太枣糕 发表于 2022/05/21 08:27:52 2022/05/21
【摘要】 ​ ​编辑  🛫更多ssm知识见SSM_面向CRUD编程专栏🚕本博客总结自黑马程序员的ssm框架视频🚒博主对于该知识尚在学习阶段🚄如果发现存在问题请毫不吝啬的指出🚀🚀扎哇太枣糕的博客主页🚀🚀​编辑目录1 Spring简介2 xml配置文件3 依赖、数据注入问题1 Spring简介        Spring是分层的Java SE/EE阶段应用的full-stack轻量级开源框...

 编辑

 

 

🛫更多ssm知识见SSM_面向CRUD编程专栏

🚕本博客总结自黑马程序员的ssm框架视频

🚒博主对于该知识尚在学习阶段

🚄如果发现存在问题请毫不吝啬的指出

🚀🚀扎哇太枣糕的博客主页🚀🚀

编辑

目录

1 Spring简介

2 xml配置文件

3 依赖、数据注入问题


1 Spring简介

        Spring是分层的Java SE/EE阶段应用的full-stack轻量级开源框架,主要以两个部分IOC  (Inverse Of Control 反转控制)和AOP  (Aspect Oriented Programming 面向切面编程)为内核。所谓的full-stack就是说提供了web层的Spring MVC、DAO层的JDBC模板、业务层的事务管理等众多的企业级应用技术,除此之外还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架。

        了解完Spring是什么,接下来学习一下Spring的发展历程,Spring框架的前身是IBM提出的EJB,2005年Spring之父罗德·约翰森(Rod Johnson)发表Expert One-on-One J2EE Development without EJB一书被认为是Spring框架的雏形,再后来经过几年的发展就有了我们现在学习的Spring框架。编辑

 从高斯林和约翰森两位大佬的发型就能看出来,学Java必定是前途无量。

Spring体系结构

我们对Spring的学习是按照它的体系结构从下往上开始学习的编辑

 Spring快速入门开发

学习Spring之前

        在使用Spring之前想要在UserDaoDemo的main方法里调用UserDaoImple类中的save方法,就要先使用多态创建对象就是通过new创建,再使用创建出来的UserDao对象调用save方法。这样做不好的地方就是:将创建对象写死(固定)了,编码过度耦合,代码里面创建的是什么对象就只能用什么对象。

编辑

学习Spring之后

        使用Spring就可以通过xml配置文件实现解耦合,通过xml配置文件的配置和getBean方法的配合就可以动态的修改创建对象,具体步骤如下:编辑

目录结构:

编辑

 第一步:通过maven导入spring-context对应的依赖坐标

编辑

第二步:编写UserDao对应的接口和实现类 

编辑

编辑 第三步:创建applicationContext.xml配置文件并配置id标识标识 UserDaoImpl类

编辑

第四步:在UserDemo中通过Spring的API获得Bean并调用方法

编辑

控制端运行结果

编辑

红色的是打印的日志信息而非报错

2 xml配置文件

Bean标签的配置

属性:

id:Bean在Spring容器中的唯一标识,在一个xml配置文件内部所有Bean标识的命名不可与之重复

class:Bean的全限名,指定这个id标识所对应的Bean类。Spring框架底层利用反射通过这个全限名对应Bean类的无参构造器创建对象。

scope:指的是对象创建的模式,有以下五中取值

  • singleton:是scope属性的默认值,相当于饿汉单例模式,也就是说Bean对象只在使用xml配置文件创建Spring客户端对象的时候创建一次,之后使用getBean方法获取Bean对象的时候返回的都是之前创建好的Bean对象。singleton一共就在Spring的核心文件被加载时创建一次一个Bean对象存储在容器里,当应用卸载销毁容器时对象随之销毁。
  • prototype:相当于多例设计模式,也就是说在每一次使用Spring客户端对象的getBean方法时都会创建一个新的Bean对象并返回。prototype是使用几次getBean方法就会创建几个Bean对象,当对象长时间不用的时候就会被java的垃圾回收机器回收对象也就销毁了。
  • request:web项目中,Spring创建一个Bean对象并将其存入到request域中
  • session:web项目中,Spring创建一个Bean对象并将其存入到session域中
  • global session:web项目中,应用于portlet环境中,如果没有portlet环境的话就相当于session

init-method:指定Bean类中的初始化方法

destory-method:指定Bean类中的销毁方法

import标签

import标签是用来将其他配置文件的配置内容加载到这个配置文件中编辑 

 Bean实例化的三种方法:

  • 无参构造方法实例化(重点):无参构造方法其实就是我们上面讲的那些知识点
  • 工厂静态方法实例化:通过工厂中的静态方法进行实例化,只需创建一个工厂类,类里面创建一个静态方法,方法返回一个无参构造器创建的Bean对象,再设置xml文件即可

编辑

编辑

  •  工厂实例方法实例化:通过工厂中的实例方法进行实例化,与工厂静态方法的区别就是,用于返回一个无参构造器创建的Bean对象的方法是实例方法,xml配置文件也不一样,要更加复杂些。

编辑

编辑

3 依赖、数据注入问题

引出问题:

        现在有这么一个情况,除了上面已经有的dao层之外,新建一个业务层service。service层的结构和dao层相似,也是一个接口和实现类。目录结构如下:编辑

UserServiceImpl类和UserDaoImpl类也都通过xml配置文件的bean标签进行配置。编辑

 此时有一个需求,就是要在service层的UserServiceImpl类里的cast()方法中调用UserDaoImpl类的save()方法,实现思想就是在UserServiceImpl类里的cast()方法中使用之前UserDaoDemo的那一套进行调用UserDaoImpl类的save()方法编辑

 在新建的UserController类中使用那一套调用UserServiceImpl类里的cast()方法

编辑

这么一来,就可以在Spring容器外部将Dao组装到了Service编辑 那么,有没有一种方式,可以在Spring容器内部就将Dao组装到了Service呢?有的,于是乎就出现了依赖注入。

依赖注入:

        依赖注入(Dependency Injection)是Spring框架核心IOC(控制反转)的具体实现。在编程的时候通过控制反转就可以把对象的创建交给Spring 容器,IOC只是降低他们之间的依赖关系并不会消除依赖,service层仍会调用dao层的方法。那么,该如何将UserDao注入到UserService的内部呢?

依赖注入的两种方式:

set方法注入

就相当于将userDao对象通过setUserDao方法当做一个参数直接传给UserServiceImpl类中,当创建UserServiceImpl类的对象调用cast()方法时,cast()方法内部就会使用setUserDao方法传过来的userDao对象调用save()方法编辑

具体setUserDao方法参数的userDao对象是如何创建的,这就要到xml配置文件中设置了编辑

xml配置文件的另一种配置方式的写法,知道即可还是上面的<property>标签的可读性更加高

编辑

 通过set方法注入的方式,就可以在Spring容器内部时就将Dao组装到了Service编辑

 set方法注入的关键就是,xml配置文件<property>标签将Dao组装到了Service,并在再service层的实现方法上用set方法接收dao层的对象,并使用对象对dao层进行操作。

构造方法注入

创建一个有参构造器用于接收UserDao对象

编辑

使用<constructor-arg>标签配置

编辑

⚠  set方法注入和构造器注入的方式其他都一样,就是接收UserDao的载体set注入是私有属性的setter方法、构造器注入是有参构造器,xml配置文件的标签set注入是<property>、构造器注入是<constructor-arg>

set方式注入其他类型数据

        以上两种依赖注入的方式不只能用于注入对象,还可以用于注入普通数据类型、引用数据类型和集合数据类型,接下来就以set注入方式为例演示

普通数据类型

创建变量相应的setter方法编辑

配置xml配置文件

编辑 spring客户端对象获取Bean对象,并调用save方法

编辑

数组、集合、propetries

propetries是Java的一个类以键值对的形式存储配置信息

setter方法

编辑

xml配置文件 

编辑

  spring客户端对象获取Bean对象,并调用save方法

编辑

总结(注入数据时配置文件的配置格式)

编辑上图传作资源,如有用可自行下载:下载地址 

      

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。