【spring基础】如何搭建一个spring项目?

关于spring

        spring是一个开源的轻量级Java开发应用框架, 可以简化企业级应用开发。Spring解决 了开发者在JavaEE开发中遇到的许多常见的问题,提供了功能强大I0C、AOP及Web MVC等功能。是当前企业中Java开发几乎不能缺少的框架之一。

不知道大家是否和我一样,想学习spring或springboot却去发现极难上手,甚至连一个基于spring的hello world都搞不出来,各种配置问题,各种报红,但看了不少课程以及文章后,我终于会搭建一个spring项目了,下面是我的搭建过程,希望能对你有所帮助。

1.配置开发环境

IDEA 2023.2 jdk 17Maven 3.9.6

        因为不同版本IDEA的界面和交互都有一定区别,这里是基于IDEA 2023.2版本的教程,为了避免因为版本不一致导致大家的创建失败,浪费时间,我这里建议采用一致或版本接近的IDEA开发工具。

下面提供一些配置该环境的参考链接


IDEA2023获取链接:https://pan.baidu.com/s/19XcDeoSx_vvXEwelHDMEeQ

提取码:vmwa

IDEA2023安装步骤,我参考的是这个链接:https://www.bilibili.com/video/BV1Ew4m1f7tf/?spm_id_from=333.337.search-card.all.click&vd_source=5d2933a45bf9ab95045e0ab78a3daf59

跟着一步步安装就行


JDK获取:https://www.oracle.com/java/technologies/downloads/

关于jdk的配置我这里就不展开讨论了,你可以参考其它资料


Maven 3.9.6 的安装和配置:

可以参考我的前一篇文章:http://t.csdnimg.cn/Bhk7w

建议配置好环境后再开始下面的内容。

2.具体创建步骤

(想了想,这里还是建议你在定义各种类名或文件名时,尽量与我定义的名称保持一致,因为下面我会给具体代码,名称不一致,改起来会很麻烦,也很容易出错)

2.1新建一个项目

打开IDEA工具,按如下步骤,新建一个项目:

找到src文件夹,将其删除(不需要这个,因为下面我们要创建Module)


右键项目名,创建一个Module

其实你就改个模块名称就行,其他IDEA会自动配好,检查一下就行。


2.2配置Maven工具

下面我们将为项目配置Maven工具

点击左上角图标

进入项目设置

找到 Build->Build Tools ->Maven,然后根据你安装的maven路径进行设置

2.3添加测试用的接口和类

在hellospring模块的test文件夹下,创建一个用于测试的类

在这个测试类中添加一个@Test注解

你可能会发现这里出现爆红,不要慌

添加后,你会在该模块的pom.xml文件下发现多了一个junit依赖,如下图

由于@Test注解必须要用在一个方法上,所以我们要在其下创建一个方法,该方法会用于之后的测试

下面将添加测试要用的接口和其实现类

再创建两个接口的实现类(创建时选Class)

具体代码:

接口:InterUserDao

package com.kc.dao;public interface InterUserDao {public void sayHello();
}

实现类其一:UserDao1

package com.kc.dao;
public class UserDao1 implements InterUserDao{@Overridepublic void sayHello() {System.out.println("hello spring 111");}
}

实现类其二:UserDao2

package com.kc.dao;
public class UserDao2 implements InterUserDao{@Overridepublic void sayHello() {System.out.println("hello spring 222");}
}

在com.kc包下再创一个接口

同时再创建一个该接口的实现类,该类将依赖于前面我们创建的类

代码:

接口:InterUserService

package com.kc.service;
public interface InterUserService {public void sayHello();
}

实现类:UserService

package com.kc.service;
import com.kc.dao.InterUserDao;
public class UserService implements InterUserService{InterUserDao userDao;//将接口InterUserDao的实现类作为成员变量,以实现依赖@Overridepublic void sayHello() {userDao.sayHello();}
}

到这里用于测试spring框架IoC功能的接口和类基本就创建完成了

:IoC即控制反转,作用是解耦,目的是为了解决程序中类与类之间耦合度过高的问题,方便程序的复用、修改以及拓展。

那spring是如何实现IoC功能的?

其实就是把类对象交给spring来创建和管理,spring会将你交给它的这些类对象配置成bean,当你需要在一个类中使用另一个类的对象时,你就不需要自己去创建(new)这个对象了,spring会帮你自动注入这个对象的实例。

2.4引入spring-context依赖

在pom.xml中添加spring-context依赖

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.1.2</version>
</dependency>

如果你会发现报红,这说明你的依赖库中没有该依赖,但不用慌,点击右侧的m标志,点击刷新按钮

等待IDEA工具添加完依赖文件

其实到这一步基础的spring项目环境已经配置好了,下面就是对bean的配置了,下面我将介绍三个实现IoC功能的bean的配置方式

2.5三个实现IoC功能的bean的配置方式

方式一:基于纯xml的配置方式实现spring的IoC功能(出现于spring 1)

这个配置方式已经比较老了,但有些项目还是会用到,还是介绍一下

在resources文件夹下添加一个xml文件(这个Spring Config选项只有在上一步成功添加spring-context依赖后才会出现)

我这里把该文件命名为了spring

在spring.xml文件中添加如下代码

代码:(这里注意一下class路径要根据自己的类路径来,name可以自定义,这里ref表示UserService依赖对象的name,可以通过修改,改变其依赖)

<bean class="com.kc.dao.UserDao1" name="userDao1"></bean><!--将UserDao1的对象配置成bean-->
<bean class="com.kc.dao.UserDao2" name="userDao2"></bean><!--将UserDao2的对象配置成bean--><bean class="com.kc.service.UserService" name="service"><!--将UserService的对象配置成bean--><property name="userDao" ref="userDao1"></property><!--表示UserService的对象依赖于UserDao1对象,即告诉spring在UserService类中会用到UserDao1类型的成员变量,是spring注入的依据-->
</bean>

这时你会发现,有一处报红了,这样处理

在UserService类中找到这个函数,修改它的参数类型,以及函数体。

在测试文件中添加如下代码:

test01中的代码:

import com.kc.config.SpringConfig;
import com.kc.service.InterUserService;
import com.kc.service.UserService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test01 {@Testpublic void test(){//基于xml配置方式的创建容器的方法ClassPathXmlApplicationContext ioc=new ClassPathXmlApplicationContext("spring.xml");//让spring根据xml文件中的信息创建一个spring容器InterUserService userService= ioc.getBean(UserService.class);//在容器中获取UserService类型的beanuserService.sayHello();//调用该实例化对象的方法}
}

运行测试:

点击test方法右侧的绿色运行图标

点击运行该函数

这就是用纯xml方式的来配置bean,我觉得确实有些麻烦,好在还有很多其他方式,相比也更加简便

方式二:基于xml+注解实现spring的IoC功能(出现于spring 2)

这种方式常用在基于SSM框架的开发中

如果你成功实现了方式一,那恭喜你,实现方式二你只需要修改几个地方就行。

修改xml文件

代码:

<!--表示扫描的范围,扫描在com.kc包内的所有带@Component注解的类,并将其对象交给spring管理-->
<context:component-scan base-package="com.kc"></context:component-scan>

添加注解(这里UserDao1和UserDao2你只能选其中一个实现类来添加,用哪个就添加哪个,否则测试时会报错)


运行测试:


测试成功

方式三:基于配置类+注解实现spring的IoC功能(出现于spring 3)

这个方式完全舍弃了对xml的配置,把原来xml文件的工作交给一个类来完成,所以这个类也被叫做配置类

在包com.kc包下添加一个类作为配置类

添加两个标签:

配置类SpringConfig中的代码:

package com.kc.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration
@ComponentScan("com.kc")
public class SpringConfig {
}

把xml文件中的内容注释

修改测试类test01中的内容

test01中的代码:

import com.kc.config.SpringConfig;
import com.kc.service.InterUserService;
import com.kc.service.UserService;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test01 {@Testpublic void test(){//基于xml配置方式的创建容器的方法//ClassPathXmlApplicationContext ioc=new ClassPathXmlApplicationContext("spring.xml");//让spring根据xml文件中的信息创建一个spring容器//基于配置类的创建容器的方法AnnotationConfigApplicationContext ioc = new AnnotationConfigApplicationContext(SpringConfig.class);InterUserService userService= ioc.getBean(UserService.class);//在容器中获取UserService类型的beanuserService.sayHello();//调用该实例化对象的方法}
}

运行测试:

运行成功

当然配置类中还分其他不同的配置bean的方法,由于篇幅原因就不展开讲了,有问题欢迎私信交流

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

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

相关文章

HTML5:七天学会基础动画网页13

看完前面很多人可能还不是很明白0%-100%那到底是怎么回事&#xff0c;到底该怎么用&#xff0c;这里我们做一个普遍的练习——心跳动画 想让心❤跳起来&#xff0c;我们先分析一波&#xff0c;这个心怎么写&#xff0c;我们先写一个正方形&#xff0c;再令一个圆形前移: 再来一…

HTML排版标签

一、代码示例 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>HTML排版标签</title> </head> <body> <!-- <h1>我是一级标题</h1>--> <!-- <h2&…

c++之旅第七弹——继承

大家好啊&#xff0c;这里是c之旅第七弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一.继承和派生…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:WaterFlow)

瀑布流容器&#xff0c;由“行”和“列”分割的单元格所组成&#xff0c;通过容器自身的排列规则&#xff0c;将不同大小的“项目”自上而下&#xff0c;如瀑布般紧密布局。 说明&#xff1a; 该组件从API Version 9 开始支持。后续版本如有新增内容&#xff0c;则采用上角标单…

change buff 与buffer_pool详解

buffer_pool的结构&#xff1a; change buff&#xff1a; 其中保存的是修改操作的动作 在查询的时候,change buffer是没有办法和innodb_buffer_pool查询一样缓存有数据直接返回的,因为change buffer记录的是修改操作这 个动作,并不是修改后的数据,所以即便change buffer中已经…

Airbnb将禁止在房源内安装监控摄像头

在面临隐私问题后&#xff0c;Airbnb 最近更新了政策&#xff0c;全面禁止房东在出租屋内安装并使用室内安全监控摄像头。 修订后的政策将在全球范围内适用&#xff0c;并将于4 月 30 日生效。Airbnb 表示&#xff0c;做出这一改变是为了优先考虑客人的隐私并简化安全摄像头的规…

算法之前缀和

题目1: 【模板】一维前缀和&#xff08;easy&#xff09; 方法一: 暴力解法, 时间复杂度O(n*q), 当n10^5, q 10^5, 时间复杂度为O(10^10), 会超时. 方法二: 前缀和: 快速求出数组中某一段连续区间的和. 第一步: 预处理出来一个前缀和数组dp: 1. dp[i]表示区间[1,i]里所有元…

visual studio2019项目中引入头文件失效问题的解决

这几天把项目整理一下&#xff0c;但在引入头文件过程中非常曲折。 项目本身写好了可以运行&#xff0c;但是项目结构是这样的&#xff1a; 所以想把功能模块化&#xff0c;同一类协议功能放在一起。 于是建包&#xff0c;创建文件&#xff0c;导入头文件&#xff1a; 在新…

数据结构:详解【链表】的实现(单向链表+双向链表)

目录 一&#xff0c;前言二 &#xff0c;有关链表的概念&#xff0c;结构和分类三&#xff0c;无头单向非循环链表&#xff08;单链表&#xff09;1.单链表的功能2.单链表功能的实现3.完整代码 四&#xff0c;带头双向循环链表&#xff08;双链表&#xff09;1.单链表与双链表的…

代码随想录算法训练营三刷day25 | 回溯 之 216.组合总和III 17.电话号码的字母组合

三刷day25 216.组合总和III剪枝 17.电话号码的字母组合 216.组合总和III 题目链接 解题思路&#xff1a; 选取过程如图&#xff1a; 图中&#xff0c;可以看出&#xff0c;只有最后取到集合&#xff08;1&#xff0c;3&#xff09;和为4 符合条件。 递归三部曲 确定递归函数参…

科研学习|论文解读——交替协同注意力网络下基于属性的情感分析 (IPM, 2019)

论文题目 Aspect-based sentiment analysis with alternating coattention networks 摘要 基于属性的情感分析&#xff08;ABSA&#xff09;旨在预测给定文本中特定目标的情感极性。近年来&#xff0c;为了获得情感分类任务中更有效的特征表示&#xff0c;人们对利用注意力网络…

【学习学习】学习金字塔

学习金字塔&#xff08;Cone of Learning&#xff09;&#xff0c;全称学习吸收率金字塔&#xff0c;是一种现代学习方式的理论。网上流传它是美国缅因州的国家训练实验室&#xff08;National Training Laboratories&#xff09;研究成果&#xff0c;用数字形式形象显示了采用…