Spring-IoC容器入门案例、依赖注入(DI)入门案例及bean基础配置

60 阅读3分钟

​开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情

目录

一、IoC入门案例思路分析

二、IoC容器入门案例

三、DI入门案例思路分析

四、DI入门案例

五、bean基础配置

bean别名配置

bean作用范围配置


一、IoC入门案例思路分析

1、管理什么?(Service与Dao)

2、如何将被管理的对象告知IoC容器?(配置)

3、被管理的对象交给IoC容器,如何获取到IoC容器?(接口)

4、IoC容器得到后,如何从容器中获取bean?(接口方法)

5、使用Spring导入哪些目标?(pom.xml)

二、IoC容器入门案例

1、导入Spring坐标

<!--1.导入spring的坐标spring-context,对应版本是5.2.10.RELEASE-->
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

ea98fc64754040a6b3e2eb7e67c13529.png​编辑

2、配置bean

<!--2.配置bean-->
    <!--bean标签标示配置bean
    id属性标示给bean起名字
    class属性表示给bean定义类型-->
    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>

    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">

注意: bean定义时id属性在同一个上下文中不能重复

3、获取IoC容器(初始化IoC容器(Spring核心容器/Spring容器)),通过容器获取bean

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App2 {
    public static void main(String[] args) {
        //3.获取IoC容器
        //加载配置文件得到上下文对象,也就是容器对象
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");


    }
}

4、获取bean(根据bean配置id获取)

 //4.获取bean(根据bean配置id获取)
 //获取资源
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();

执行结果:

e2554e792c1a4fb6a124eaa10c8ab247.png

三、DI入门案例思路分析

1、基于IoC管理bean

2、Service中使用new形式创建Dao对象是否保留?(否)

3、Service中需要Dao对象如何进入到Service中?(提供方法)

4、Service与Dao间的关系如何描述?(配置)

四、DI入门案例

BookService接口:

public interface BookService {
    public void save();
}

BookServiceImpl实现类:

import com.itheima.dao.BookDao;
import com.itheima.service.BookService;

public class BookServiceImpl implements BookService {
    //5.删除业务层中使用new的方式创建的dao对象
    private BookDao bookDao;

    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }
    //6.提供对应的set方法
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

applicationContext.xml代码:

<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <!--7.配置server与dao的关系-->
        <!--property标签表示配置当前bean的属性
        name属性表示配置哪一个具体的属性
        ref属性表示参照哪一个bean-->
        <property name="bookDao" ref="bookDao"/>
    </bean>

App2:

import com.itheima.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App2 {
    public static void main(String[] args) {
        //获取IoC容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取bean(根据bean配置id获取)

        BookService bookService = (BookService) ctx.getBean("bookService");
        bookService.save();

    }
}

执行结果:

cb269e7865174060a26bff5caa63564a.png

五、bean基础配置

类别描述
名称bean
类型标签
所属beans标签
功能定义Spring核心容器管理的对象
格式****
属性列表id:bean的id,使用容器可以通过id值获取对应的bean,在一个容器中id值唯一class:bean类型,即配置的bean的全路径类名
范例****

bean别名配置

类别描述
名称name
类型属性
所属bean标签
功能定义bean的别名,可定义多个,使用逗号(,)分号(;)空格( )分隔
范例<bean id="bookDao" name=“dao bookDaoImpl” class="com.itheima.dao.impl.BookDaoImpl"/>****

注意事项:

获取bean无论是通过id还是name获取,如果无法获取到,将抛出异常NoSuchBeanDefinitionException

NoSuchBeanDefinitionException:No bean named 'bookServiceImpl' available

bean作用范围配置

类别描述
名称scope
类型属性
所属bean标签
功能定义bean的作用范围,可选范围如下singleton:单例(默认)prototype:非单例
范例

为什么bean默认认为单例?

适合交给容器进行管理的bean

■ 表现层对象

■ 业务层对象

■ 数据层对象

■ 工具对象

不适合交给容器进行管理的bean

■ 封装实体的域对象