【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已经被弃用了。


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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值