Spring-入门案例(包含IOC和DI入门案例)

Spring-入门案例

  • 包括:
    • IoC入门案例
    • DI入门案例

一、IoC入门案例

1.1 分析

  • IoC容器管理什么?

    • Service和Dao对象,即Bean;
  • 如何将被管理的对象告知IoC容器?(哪些类的对象需要IoC容器管理)

    • 通过配置文件实现(如xml);
  • 如何获取IoC容器?

    • 通过接口
  • 得到IoC容器后,如何获取容器中的被管理对象(Bean)?

    • 通过接口方法;
  • 使用Spring导入哪些坐标?(即导入哪些外部依赖)

    • 在pom.xml中给出

1.2 案例

  • 根据上述分析,编写第一个Spring中运用IoC思想的案例:

  • 工程目录结构:

    在这里插入图片描述

  • **步骤1:**导入Spring坐标

    • 在pom.xml中添加:

      <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.21.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
      
  • **步骤2:**定义Spring管理的类(需要IoC容器管理的类和接口)

    • BookDao接口
    /**
     * @author: sea
     * @date: 2023/6/24 16:28
     */
    public interface BookDao {
        void save();
    }
    
    • BookDaoImpl类:
    /**
     * @author: sea
     * @date: 2023/6/24 16:30
     */
    public class BookDaoImpl implements BookDao {
        @Override
        public void save() {
            System.out.println("BookDaoImpl____1");
        }
    }
    
    • BookService接口
    /**
     * @author: sea
     * @date: 2023/6/24 16:29
     */
    public interface BookService {
        void save();
    }
    
    • BookServiceImpl类:
    /**
     * @author: sea
     * @date: 2023/6/24 16:30
     */
    public class BookServiceImpl implements BookService {
        private BookDao bookDao = new BookDaoImpl();
        public void save(){
            bookDao.save();
        }
    }
    
  • **步骤3:**创建Spring配置文件,配置对应的类作为Spring管理的bean

    • resource目录下创建 Spring Config配置文件applicationContext.xml文件
    <?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">
    
        <!--  1.在pom.xml中导入spring和junit的坐标  -->
        <!--  2.配置bean(id需唯一)  -->
        <bean id="bookDao_" class="com.sea.dao.impl.BookDaoImpl"/>
        <bean id="bookService_" class="com.sea.service.impl.BookServiceImpl"/>
    
    </beans>
    
  • **步骤4:**初始化IoC容器,通过容器获取bean

    • 在App_1.java中进行容器初始化并通过容器来获取bean
    /**
     * @author: sea
     * @date: 2023/6/24 16:41
     */
    public class App_1 {
        public static void main(String[] args) {
            //获取IoC容器
            ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");//通过接口的实现类获取IoC容器
            //获取Bean
            BookDao bookDao = (BookDao)ctx.getBean("bookDao_");//通过接口的方法获取bean
            bookDao.save();
    //        BookService bookService = (BookService)ctx.getBean("bookService");
    //        bookService.save();
        }
    }
    
  • **注意:**此时,BookServiceImpl仍然是通过private BookDao bookDao = new BookDaoImpl();来手动创建BookDao的,这个依赖关系目前在容器中还没有进行绑定。

二、DI入门案例

  • 在上述案例的基础上:
    • 不能再通过new BookDaoImpl();来获得BookDao的对象,需要解耦;

2.1 分析

  • Service中需要的Dao对象如何进入Service呢?
    • 提供方法来实现
  • 不同的Service与Dao之间的关系Spring容器如何知道?
    • 配置文件

2.2 案例

  • 在上述IoC案例的基础上:

  • **步骤1:**在Service中提供相应的方法获取Dao对象

    • IoC容器会调用setBookDao()方法将需要的bean给Service;
    /**
     * @author: sea
     * @date: 2023/6/24 16:30
     */
    public class BookServiceImpl implements BookService {
        private BookDao bookDao;
        public void save(){
            bookDao.save();
        }
        
        public void setBookDao(BookDao bookDao){
            this.bookDao = bookDao;
        }
    }
    
  • **步骤2:**Spring配置文件中[applicationContext.xml]配置service与dao的关系

    <?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">
    
        <!--  1.在pom.xml中导入spring和junit的坐标  -->
        <!--  2.配置bean(id需唯一)  -->
        <bean id="bookDao_" class="com.sea.dao.impl.BookDaoImpl"/>
        <bean id="bookService_" class="com.sea.service.impl.BookServiceImpl">
            <!--  3.配置service与dao之间的关系  -->
                <!--  name: 表示配置当前Service中哪一个具体的属性  -->
                <!--  ref: 表示参照哪一个bean  -->
            <property name="bookDao" ref="bookDao_"/>
        </bean>
    </beans>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SEA-365

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值