目录
创建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已经被弃用了。文章来源:https://www.toymoban.com/news/detail-411519.html
有什么错误评论区指出。希望可以帮到你。文章来源地址https://www.toymoban.com/news/detail-411519.html
到了这里,关于Spring项目的创建与使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!