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

目录

创建Spring项目

创建Maven项目

引入依赖

使用镜像下载

下载依赖

添加启动类

使用Spring项目

创建Spring配置文件

存储Bean

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

通过id

通过class

通过class+id(推荐)

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

ApplicationContext和BeanFactory的关系


创建Spring项目

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


创建Maven项目

【JavaEE】Spring项目的创建与使用_第1张图片

【JavaEE】Spring项目的创建与使用_第2张图片


引入依赖

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

在中心仓库搜索Spring

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

【JavaEE】Spring项目的创建与使用_第3张图片

【JavaEE】Spring项目的创建与使用_第4张图片5.X.X对应JDK8,6.X.X对应JDK17

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

    
        
        
            org.springframework
            spring-context
            5.3.20
        

    

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


使用镜像下载

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

1:IDEA中的设置

【JavaEE】Spring项目的创建与使用_第5张图片

【JavaEE】Spring项目的创建与使用_第6张图片

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

   
        alimaven
        aliyun maven
        http://maven.aliyun.com/nexus/content/groups/public/
        central        
  

 【JavaEE】Spring项目的创建与使用_第7张图片

2:项目中的设置

【JavaEE】Spring项目的创建与使用_第8张图片

【JavaEE】Spring项目的创建与使用_第9张图片

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


下载依赖

【JavaEE】Spring项目的创建与使用_第10张图片

【JavaEE】Spring项目的创建与使用_第11张图片  


添加启动类

【JavaEE】Spring项目的创建与使用_第12张图片


使用Spring项目

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

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

创建Spring配置文件

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




存储Bean

需要先创建出Bean

【JavaEE】Spring项目的创建与使用_第13张图片

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

【JavaEE】Spring项目的创建与使用_第14张图片


取出并使用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();
    }
}

【JavaEE】Spring项目的创建与使用_第15张图片

通过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接口没有很大的区别。

【JavaEE】Spring项目的创建与使用_第16张图片

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");
    }
}

【JavaEE】Spring项目的创建与使用_第17张图片

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

配置文件下现在有【JavaEE】Spring项目的创建与使用_第18张图片

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

【JavaEE】Spring项目的创建与使用_第19张图片

【JavaEE】Spring项目的创建与使用_第20张图片

使用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");
}

执行代码后

【JavaEE】Spring项目的创建与使用_第21张图片

结论:可以看出它把配置文件中所有的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"));

    }
}

【JavaEE】Spring项目的创建与使用_第22张图片

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

使用一下Teacher观察结果:

【JavaEE】Spring项目的创建与使用_第23张图片

ApplicationContext和BeanFactory的关系

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

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

性能方面:

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

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

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


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

你可能感兴趣的:(JavaEE,spring,java,maven)