02.Spring的快速入门及相关API

77 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情

  • 📝 个人主页:程序员阿红🔥
  • 🎉 支持我:点赞👍收藏⭐️留言📝
  • 🍓欢迎大家关注哦,互相学习🍓
  • 🍋欢迎大家访问哦,互相学习🍋
  • 🍑欢迎大家收藏哦,互相学习🍑

1.介绍

需求:借助spring的IOC实现service层与dao层代码解耦合

步骤分许:

  1. 创建java项目,导入spring开发基本坐标
  2. 编写Dao接口和实现类
  3. 创建spring核心配置文件
  4. 在spring配置文件中配置 UserDaoImpl
  5. 使用spring相关API获得Bean实例

2.实现

(1)创建java项目,导入spring开发基本坐标

 <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

(2)编写Dao接口和实现类

public interface UserDao {
  public void save();
}
public class UserDaoImpl implements UserDao {
 
  public void save() {
    System.out.println("保存成功了...");
 }
}

(3)创建spring核心配置文件

<?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">
<!--    在spring配置文件中配置UserDaoImpl
        id:唯一标识
        class:类全路径
-->
    <bean id="userDao" class="com.weihong.dao.impl.UserDaoImpl"></bean></beans>

(4)使用spring相关API获得Bean实例

@Test
    public void UserTest(){
        //获取到Spring上下文对象,借助上下文对象可以获取IOC容器的bean对象
        // 1.底层利用dom4j解析applicationContext.xml文件
        // 2.根据传入的bean对象id参数实例化该对象
        // 3.利用该对象调用save方法。
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
        userDao.save();
​
​
    }

(5)运行结果

image-20220301135006785

Spring相关API

  • Spring的API体系异常庞大,我们现在只关注两个BeanFactory和ApplicationContext
  • 紫色部分:全都是接口
  • 浅绿色:抽象类
  • 绿色:具体的实现类

image-20220301141012742

(1)BeanFactory

BeanFactory是 IOC 容器的核心接口,它定义了IOC的基本功能。

  • 特点:在第一次调用getBean()方法时,创建指定对象的实例。
  @Test
    public void test2(){
        // 核心接口,不会创建bean对象存到容器中
        BeanFactory xmlBeanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
        //getBean的时候才真正创建bean对象
        IUserDao userDao = (IUserDao) xmlBeanFactory.getBean("userDao");
        userDao.save();
    }

(2)ApplicationContext

代表应用上下文对象,可以获得spring中IOC容器的Bean对象。

  • 特点:在spring容器启动时,加载并创建所有对象的实例

           @Test
        public void UserTest(){
            //获取到Spring上下文对象,借助上下文对象可以获取IOC容器的bean对象
            // 1.底层利用dom4j解析applicationContext.xml文件
            // 2.根据传入的bean对象id参数实例化该对象
            // 3.利用该对象调用save方法。
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserDao userDao = (UserDao) applicationContext.getBean("userDao");
            userDao.save();
        }
    

两者的区别就是创建实例对象的时机不一样。

(3)其他常用实现类

  1. ClassPathXmlApplicationContext 它是从类的根路径下加载配置文件 推荐使用这种。
  2. FileSystemXmlApplicationContext 它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
  3. AnnotationConfigApplicationContext 当使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。
​
    @Test
    public void test1(){
        // 获取到了spring上下文对象,借助上下文对象可以获取到IOC容器中的bean对象 ,加载的同时就创建了bean对象存到容器中
         ApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //ApplicationContext fileSystemXmlApplicationContext = new FileSystemXmlApplicationContext("D:\spring_code\spring_quickstart\src\main\resources\applicationContext.xml");
        // 使用上下文对象从IOC容器中获取到了bean对象
        // 1.根据beanid在容器中找对应的bean对象
        //IUserDao userDao = (IUserDao) classPathXmlApplicationContext.getBean("userDao");
        // 2.根据类型在容器中进行查询:有可能报错的情况:根据当前类型匹配到多个实例
        IUserDao userDao = classPathXmlApplicationContext.getBean("userDao",IUserDao.class);
        // 调用方法
        userDao.save();
​
    }

(4)常用方法

  1. Object getBean(String name); 根据Bean的id从容器中获得Bean实例,返回是Object,需要强转。
  2. T getBean(Class requiredType); 根据类型从容器中匹配Bean实例,当容器中相同类型的Bean有多个时,则此方法会报错。
  3. T getBean(String name,Class requiredType); 根据Bean的id和类型获得Bean实例,解决容器中相同类型Bean有多个情况

(5)知识小结

ApplicationContext app = new ClasspathXmlApplicationContext("xml文件");
  app.getBean("id");
  app.getBean(Class);

🍗🍗🍗 完结撒花

💖💖💖写作不易,如果您觉得写的不错,欢迎给博主点赞、收藏、评论、收藏来一波~让博主更有动力吧

👍👍👍 路漫漫其修远兮,吾将上下而求索