【SSM面向CRUD编程专栏 2】Spring相关API 数据源(连接池)的配置 注解开发 整合junit

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

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

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

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

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

目录

1 Spring相关API

2 Spring配置数据源

3 Spring注解开发

 4 Spring整合Junit


1 Spring相关API

创建Spring客户端对象

创建Spring客户端对象主要是依靠多态的方式使用ApplicationContext接口的以下三个实现类:

ClassPathXmlApplicationContext类

这个类的参数使用的是相对路径,xml文件需要在项目下的resource文件夹下进行配置

FileSystemXmlApplicationContext类

这个类的参数使用的是绝对路径,xml文件可以在任何地方进行配置,但是缺点是一旦配置文件修改位置或者是将项目在其他电脑上运行的话基本上就是报错无法正常运行。

 AnnotationConfigApplicationContext类

使用注解配置容器对象的使用此类创建Spring容器读取注解,先行了解,后续的学习再使用。在博客的最后一小块进行了介绍使用。

获取Bean对象

getBean(String id)

通过唯一id标识去创建bean对象,好处是id标识唯一确定一个bean类,不会创建错

getBean(Class<T> type)

通过bean类创建bean对象,坏处就是配置文件里的bean类不止一个,如果此时配置文件里bean类的标签不唯一就会抛NoUniqueBeanDefinitionExceptionBean定义不唯一异常

2 Spring配置数据源

         数据源又被称为是连接池其出现的目的是为了提高程序的性能,数据源可以事先实例化源数据并初始化部分连接资源,使用连接资源的时候可以从数据源中获取,使用完毕之后再将连接资源还给数据源。常见的数据源有DBCP、C3P0、BoneCP、Druid等。

        Druid数据源的创建方式有很多种:手动创建、使用配置文件解耦合、使用spring框架依赖注入并解耦合,他们的学习是层层递进的,要从手动开始最后引入spring框架这样便于加深理解。

手动创建Druid数据源

第一步:通过pom文件依赖坐标的方式导入两个数据源需要使用的jar包                                          第二步:创建数据源对象并设置基本连接信息,最后归还资源                                           

将数据源对象的基本连接信息设置抽取出来到配置文件,实现解耦合

第一步:通过pom文件依赖坐标的方式导入两个数据源需要使用的jar包 (跟上一个相同)

第二步:配置配置文件,配置文件的后缀是properties,也就是使用键值对的形式存储配置信息

第三步:创建数据源对象并设置基本连接信息,最后归还资源

🔥使用Spring依赖注入的方式创建Druid数据源,并实现解耦合最终进化版本,以后的使用模板

第一步:导入spring-contest依赖和以上两种依赖

 第二步:配置配置文件,存储数据源配置信息

第三步:创建applicationContext.xml配置文件并配置bean标签

 第四步:创建数据源对象操作连接最后归还资源

3 Spring注解开发

Spring的原始注解

通过案例了解注解开发

        注解开发的优势就在于进一步使用反射封装代码,简化xml配置文件的内容,使用注解就可以代替xml配置文件的bean标签配置。

在使用注解开发之前,xml文件里要使用UserDaoImpl类的bean标签创建对象,使用UserServiceImpl类的bean标签创建对象的同时将上一个bean标签创建的对象通过set方法依赖注入到这个bean标签里。

依赖注入的有关注解

@Component:通用版的@Repository注解,无论哪一层都能用,缺点就是辨识度不高,无法通过注解理清楚这是哪一层的业务

@Repository:Dao层的@Component注解用于实例化Bean,加上字符串参数相当于一个<bean>标签设置了唯一id标识。这个注解的作用相当于图中上面一行的<bean>标签。

@Controller:controller层的@Component注解用于实例化Bean

@Service: Service层的@Component注解用于实例化Bean,用法和意义同上一个

@Autowired: 用于依赖注入,加入注解后就说明下面的变量定义用到了依赖注入

@Qualifier:用于指定注入对象相当于ref属性

当然这种依赖注入还可以进一步简写。就是只保留@Autowired注解舍去@Qualifier注解,再将set方法的定义舍去。之所以这么做也能成功的原因是:xml配置文件里面只有一个这种类型的bean标签,此时只会唯一将该bean对象注入进去,不会出现像使用getBean方法时参数传class对象但是bean不唯一抛异常的问题。只使用一个@Autowired注解的话,需要保证只有一个同类型的bean被注入到spring容器中。不管是用哪种方式,使用几个注解,set方法的定义都可以省略不写,注解底层已经通过反射机制为我们创建好了。

@Resource:如果出现了xml配置文件里面不只有一个这种类型的bean标签的情况时,相当于下面这种情况一个类创建了两个标签,这个时候就用到了这个注解

 

除了使用注解之外,还要在xml文件使用标签扫描注解,让spring容器知道都使用了哪些注解并实现对应的功能

数据注入的注解 

@Value:将基本数据类型和string字符串注给下面的变量

 除了直接注入数据的形式,还能引用spring容器中的数据进行注入

其他注解

@Scope:与bean标签的scope属性意思相同

 @PostConstruct:指明下面的方法是初始化方法

@PreDestory:指明下面的方法是销毁方法

 新注解

注解开发的最终目的就是用注解取代xml配置文件的同时还不会降低代码的解耦合能力,使用上面的注解进行开发时还是无法替代全部的xml文件,依然有以下四种标签无法被注解所取代,需要使用新注解进行开发取代xml文件

  • 非自定义的bean(就像前面Druid数据源配置的bean标签,第三方jar包给的bean无法取代)
  • 加载properties文件的标签<context:property-placeholder>
  • 组件扫描<context:component-scan>
  • 引入其他配置文件的<import>

@Configuration:标示这是Spring容器的核心配置类,相当于xml配置文件

@ComponentScan:扫描包下注解,相当于<context:component-scan>

@Import:导包,相当于<import>

@property: 加载properties文件,相当于<context:property-placeholder>

@Bean:在注解里将返回值是对象的方法实例化Bean,也就是说将方法返回的对象注入到Spring容器中供调用,也相当于一个<bean>标签,只不过是用在方法上的。

由于xml文件此时已经被注解锁完全取代了,所以创建客户端对象的时候就不能再使用ClassPathApplicationContext类,要使用第三种方式AnnotationConfigApplicationContext类

 4 Spring整合Junit

第一步:导入两个依赖坐标

第二步:加注解

@RunWith:替换原来的运行期

@ContextConfiguration:指定配置文件(xml配置)或者配置类(注解配置)

         在使用spring整合Junit的时候遇到一个问题记录一下: spring-context和spring-test的依赖版本不同导致控制台抛出以下异常java.lang.NoClassDefFoundError: org/springframework/core/annotation/MergedAnnotations。解决方法:将两个以来坐标的版本改成一致即可。具体操作参考这篇博客:已解决:java.lang.NoClassDefFoundError: org/springframework/core/annotation/MergedAnnotations_ray2580的博客-CSDN博客

                                                                                                                                                           

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

下一篇:【SSM面向CRUD编程专栏 3】关于黑马程序员最全SSM框架教程视频,P37集老师跳过的模块创建以及tomcat下载安装配置和运行等诸多问题

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SSM面向CRUD编程专栏 4】 Spring集成web环境 SpringMVC初识

&#x1f6eb;更多ssm知识见SSM_面向CRUD编程专栏 &#x1f695;本博客总结自黑马程序员的ssm框架视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客主页&#x1f680;&#x1f680; ​…

IntelliJ IDEA里的项目搞崩了怎么办,本地历史版本回退拯救你崩溃的心灵

&#x1f4a5;写在前面&#xff1a; 如果你还没有读过雨果的悲惨世界也没有读过余华的活着&#xff0c;那你可以看看我今天早上的经历&#xff0c;如果不想听我胡侃的话&#xff0c;直接进入正题&#xff1a; 目录 本地历史的强大 今天早上打开IntelliJ IDEA继续ssm模块的代码练…

【SSM面向CRUD编程专栏 5】使用SpringMVC进行数据响应以及获取请求数据

&#x1f6eb;更多ssm知识见SSM_面向CRUD编程专栏 &#x1f695;本博客总结自黑马程序员的ssm框架视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客主页&#x1f680;&#x1f680; 目…

【SSM面向CRUD编程专栏 6】springMVC拦截器、异常处理 jdbcTemplate

&#x1f6eb;更多ssm知识见SSM_面向CRUD编程专栏 &#x1f695;本博客总结自黑马程序员的ssm框架视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客主页&#x1f680;&#x1f680; 目…

【SSM面向CRUD编程专栏 7】springAop 事务控制

&#x1f6eb;更多ssm知识见SSM_面向CRUD编程专栏 &#x1f695;本博客总结自黑马程序员的ssm框架视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客主页&#x1f680;&#x1f680; 目…

【SSM面向CRUD编程专栏 8】一篇博客快速上手使用MyBatis进行CRUD

&#x1f6eb;更多ssm知识见SSM_面向CRUD编程专栏 &#x1f695;本博客总结自黑马程序员的ssm框架视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客主页&#x1f680;&#x1f680; 目…

【SSM面向CRUD编程专栏 9】SSM框架整合

&#x1f6eb;更多ssm知识见SSM_面向CRUD编程专栏 &#x1f695;本博客总结自黑马程序员的ssm框架视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客主页&#x1f680;&#x1f680; 目…

三万字速通SSM框架入门知识点,快速上手CRUD

&#x1f6eb;更多ssm知识见SSM_面向CRUD编程专栏 &#x1f695;本博客总结自黑马程序员的ssm框架视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客主页&#x1f680;&#x1f680; 目…

无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

问题简介 本人是在进行一个ssm框架项目的编写的时候&#xff0c;在数据库中查询到所有的商品信息并返回到页面使用EL表达式进行展现&#xff0c;但是使用tomcat 9.0.58运行的时候报错会出现以下报错情况。 页面报错&#xff1a; 控制台报错&#xff1a; 解决方法 首先看看是不…

check the manual that corresponds to your MySQL server version for the right syntax to use near

首先判断自己是在什么情况下报的错&#xff0c;如果是MyBatis的SQL报错的话&#xff0c;建议直接点击目录跳转到MyBatis时SQL报错&#xff0c;避免浪费时间。如果本文能够对你有所帮助的话&#xff0c;还请在评论区多多支持 目录 &#x1f37b;运行SQL语句、SQL文件等报错 &…

MyBatis的逆向工程工具,自动生成数据库对应的POJO实体类、mapper接口、增删改查mapper.xml文件

下载MyBatis的逆向工程工具&#xff0c;并解压缩到一个不包含中文字符的文件夹下&#xff0c;我直接放到了D盘下&#xff0c;下载地址&#xff1a;MyBatis逆向工程工具下载 如何使用MyBatis的逆向工程工具 下载之后使用idea在一个新窗口中打开&#xff0c;选中工具文件之后&am…

『收藏向 期末SSM课设救急』 教你从搭建到测试运行手撸一个SSM项目实战,附带源码,前端页面、解析和一般遇到的问题(排雷)

&#x1f6eb;ssm知识学习见SSM_面向CRUD编程专栏 &#x1f695;本项目来自动力节点的【米米商城】 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客主页&#x1f680;&#x1f680; 项目…

【SpringBoot 2】(一)基础知识了解学习

&#x1f6eb;更多知识总结见SpringBoot 2专栏 &#x1f695;本篇知识点总结自尚硅谷雷神的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客主页&#x1f680;&#x1f680; ​ 目录…

【SpringBoot 2】(二)快速入门案例HelloWorld

&#x1f6eb;更多知识总结见SpringBoot 2专栏 ( &#x1f695;本篇知识点总结自尚硅谷雷神的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客主页&#x1f680;&#x1f680; ​ 目…

【SpringBoot 2】(三)SpringBoot相较于Spring的特点

&#x1f6eb;更多知识总结见SpringBoot 2专栏 &#x1f695;本篇知识点总结自尚硅谷雷神的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客主页&#x1f680;&#x1f680; ​ 目录…

井通swtc能不能涨到2元_买一支2块到3块之间的股票,买几十万股吗?这样操作效果怎么样?...

有很多新股民有一种看法&#xff0c;认为高价股风险很大&#xff0c;那么可不可以买2到3元的低价股&#xff0c;是不是风险就很小&#xff0c;以后上涨的力度就会很大&#xff1f;这是很多股民都存在的一个误区&#xff0c;也是很多股市的所谓高手的误导&#xff0c;他们说&…

cad应用程序的组件中发生了未经处理的异常_什么是CAD/CAM?

与许多其他行业一样&#xff0c;牙科技术的生产阶段也越来越自动化。由于牙科实验室工作的价格已成为治疗计划和治疗的主要因素&#xff0c;因此自动化可以在西欧和美国等高薪地区实现更具竞争力的生产。现在&#xff0c;计算机技术的进步使高性价比的单件生产成为可能。近年来…

【SpringBoot 2】(四)详析SpringBoot的常用注解

&#x1f6eb;更多知识总结见SpringBoot 2专栏 &#x1f695;本篇知识点总结自尚硅谷雷神的视频 &#x1f692;博主对于该知识尚在学习阶段 &#x1f684;如果发现存在问题请毫不吝啬的指出 &#x1f680;&#x1f680;扎哇太枣糕的博客首页&#x1f680;&#x1f680; 目录 向…

苹果7手机严重卡顿_苹果手机仅配备4GB运存都不会卡顿,安卓系统为何要更多内存?...

原标题&#xff1a;苹果手机仅配备4GB运存都不会卡顿&#xff0c;安卓系统为何要更多内存&#xff1f;众所周知&#xff0c;安卓系统历经十余年的发展&#xff0c;目前最低的运行需求是8GB内存&#xff0c;如果是旗舰机的话还要标配12GB或更高。但是前几天刚发布的iPhone12&…

IntelliJ IDEA自动生成自定义的类注释和方法注释

目录 自定义的类注释 自定义方法注释 实现效果&#xff1a;不用手写即可自动生成如下图的类上注释和方法上的注释&#xff0c;我们只需要填写方法注释的参数和返回值文字描述即可&#xff0c;大大节省了代码开发的时间提高代码开发效率。 &#x1f315; 自定义的类注释 Fil…