关于spring
spring是一个开源的轻量级Java开发应用框架, 可以简化企业级应用开发。Spring解决 了开发者在JavaEE开发中遇到的许多常见的问题,提供了功能强大I0C、AOP及Web MVC等功能。是当前企业中Java开发几乎不能缺少的框架之一。
不知道大家是否和我一样,想学习spring或springboot却去发现极难上手,甚至连一个基于spring的hello world都搞不出来,各种配置问题,各种报红,但看了不少课程以及文章后,我终于会搭建一个spring项目了,下面是我的搭建过程,希望能对你有所帮助。
1.配置开发环境
IDEA 2023.2 、 jdk 17 、 Maven 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的方法,由于篇幅原因就不展开讲了,有问题欢迎私信交流