Spring-IoC和DI和bean

41 阅读1分钟

IoC控制反转

  • 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权转移到外部,此思想称为控制反转
  • Spring技术对IoC思想进行了实现
  • Spring提供了一个容器,称为IoC,用来充当思想中的外部
  • IoC容器负责对象的创建,初始化等一系列工作,被创建或被管理的对象在IoC容器中被称为bean

DI依赖注入

  • 在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入 目的是为了充分解耦

IoC的使用(xml)

1、导入Spring坐标

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.10.RELEASE</version>
</dependency>

2、创建Spring配置文件,配置对应类作为Spring管理的bean(bean定义时id属性在同一个上下文不能重复)

<?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">

<!--    bean标签配置bean-->
<!--    id属性表示给bean取名字-->
<!--    class属性表示给bean定义类型-->
    <bean id="BookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
    <bean id="BookService" class="com.itheima.service.impl.BookServiceImpl">
<!--        配置service和dao的关系-->
<!--        name属性表示配置那个具体的属性-->
<!--        ref属性表示参照那个bean-->
        <property name="bookDao" ref="BookDao"/>
    </bean>
</beans>

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

package com.itheima;

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

public class main {
    public static void main(String[] args) {
        //初始化容器
        ApplicationContext txt = new ClassPathXmlApplicationContext("applicationContext.xml");//将配置文件名传入
        BookDao bookDao = (BookDao) txt.getBean("BookDao");//用容器对象调用getBean方法将配置文件bean的id传入得到bean对象即可
        bookDao.getId();
        BookService bookService = (BookService) txt.getBean("BookService");
        bookService.getId();
    }
}

DI使用

1、提供依赖对象对应的set方法 2、配置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">

<!--    bean标签配置bean-->
<!--    id属性表示给bean取名字-->
<!--    class属性表示给bean定义类型-->
    <bean id="BookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
    <bean id="BookService" class="com.itheima.service.impl.BookServiceImpl">
<!--        配置service和dao的关系-->
<!--        name属性表示配置那个具体的属性-->
<!--        ref属性表示参照那个bean-->
        <property name="bookDao" ref="BookDao"/>
    </bean>
</beans>

容器会自动的调用你提供的set方法

bean

image.png

image.png 由于Spring容器管理那些可以复用的对象,干脆就默认为单例

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

  • 表现层对象

  • 业务层对象

  • 数据层对象

  • 工具对象

  • 不适合交给容器管理的bean

  • 封装实体的域对象