> 文章列表 > 【JavaEE】Spring项目的创建与使用

【JavaEE】Spring项目的创建与使用

【JavaEE】Spring项目的创建与使用

目录

创建Spring项目

创建Maven项目

引入依赖

使用镜像下载

下载依赖

添加启动类

使用Spring项目

创建Spring配置文件

存储Bean

取出并使用Bean(通过ApplicationContext接口)

通过id

通过class

通过class+id(推荐)

取出并使用Bean(通过BeanFactory接口)

ApplicationContext和BeanFactory的关系


创建Spring项目

Spring项目的创建主要是在maven项目引入依赖后下载依赖,这时一个maven项目就变成了Spring项目。


创建Maven项目


引入依赖

在pom.xml文件下添加Spring的依赖。这里的依赖只是相当于只是声明了一下,还没有真正的导入其中。

在中心仓库搜索Spring

Maven Repository: Search/Browse/Explore (mvnrepository.com)

5.X.X对应JDK8,6.X.X对应JDK17

这里是JDK8对应的依赖,可以自行复制(在project标签下)

    <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.20</version></dependency></dependencies>

由于中心仓库在国外,下载一般会很慢,所以需要我们使用国内镜像来下载。


使用镜像下载

这里有两个地方的设置需要修改。

1:IDEA中的设置

如果有该文件,修改其配置:

   <mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>        </mirror>

 

2:项目中的设置

这样的修改是一劳永逸的,下次无需修改,只用到项目设置中看看是否需要修改(通常不用) 


下载依赖

  


添加启动类


使用Spring项目

Spring本质上是一个拥有许多方法和工具的IoC容器,容器最重要的是就是放东西取东西

这里的东西自然是Java中的对象,一般对象也被叫做Bean,接下来就使用Bean

创建Spring配置文件

在存储Bean之前,先要在resources目录下创建一个Spring的配置文件,这里面是用来声明存放Bean的。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
</beans>

存储Bean

需要先创建出Bean

然后在配置文件中声明一下就可以存放到Spring中去了


取出并使用Bean(通过ApplicationContext接口)

通过id

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import people.Student;public class App {public static void main(String[] args) {//                                         这里写配置文件的名字ApplicationContext context =new ClassPathXmlApplicationContext("spring-config.xml");// 由于取出来的 bean 类型是 Object 类型,所以需要强转成 Student 类型//                                这里的 student 需要和 配置文件中的id 相同Student student = (Student) context.getBean("student");student.sayHi();}
}

通过class

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import people.Student;public class App {public static void main(String[] args) {//                                         这里写配置文件的名字ApplicationContext context =new ClassPathXmlApplicationContext("spring-config.xml");Student student = context.getBean(Student.class);student.sayHi();}
}

通过class+id(推荐)

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import people.Student;public class App {public static void main(String[] args) {//                                         这里写配置文件的名字ApplicationContext context =new ClassPathXmlApplicationContext("spring-config.xml");// 这种写法相较于之前id找到bean后,然后转成Student对象来说// 省去了强转的这一步 (推荐写法)Student student = context.getBean("student", Student.class);student.sayHi();}
}

取出并使用Bean(通过BeanFactory接口)

通过该接口取出使用Bean与ApplicationContext接口没有很大的区别。

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import people.Teacher;public class App {public static void main(String[] args) {BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));// Teacher teacher = (Teacher) factory.getBean("teacher");// Teacher teacher = factory.getBean(Teacher.class);Teacher teacher = factory.getBean("teacher", Teacher.class);teacher.sayHi();}
}
public class Teacher {public void sayHi() {System.out.println("hi teacher");}
}

那么表面上看二者使用没有任何取区别,通过下面的代码可以看出二者的本质区别。

配置文件下现在有

再手动创建一下构造方法方便观察

使用ApplicationContext获取上下文

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class App2 {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
}

执行代码后

结论:可以看出它把配置文件中所有的Bean先都加载出来了

使用BeanFactory获取上下文

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;public class App2 {public static void main(String[] args) {BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));}
}

结论:没有使用Bean,就没有任何Bean被加载。

使用一下Teacher观察结果:

ApplicationContext和BeanFactory的关系

继承方面:二者都是Spring容器的顶级接口,ApplicationContext是BeanFactory的子类。

功能方面:ApplicationContext出了拥有BeanFactory的所有功能之外,还添加了一些其他功能:对国际化支持、资源访问的支持、事务传播方面的支持等。

性能方面:

        ApplicationContext  比较费内存,一次性会全部加载完所有Bean对象,后续使用会很快。

        BeanFacotry  不费内存,只有调用时才初始化,所以后续使用效率不高。

推荐使用 ApplicationContext,因为BeanFactory已经被弃用了。


有什么错误评论区指出。希望可以帮到你。