Spring框架IOC、DI

什么是IOC?

IOC(Inverse of Control)即控制反转,它将对象的创建和依赖注入的过程由程序员手动控制转化为由容器自动创建和注入。

是Spring框架的核心特性之一,它通过将对象的创建和依赖关系的管理交给容器来实现应用程序的松耦合。IoC容器负责实例化、配置和装配对象,使得开发人员可以更加专注于业务逻辑的编写,而不必关心对象的创建和管理。

在Spring中,IoC容器通过读取XML文件或注解配置信息来了解如何创建和组装对象。容器在启动时会自动扫描指定的路径下的所有类,并将这些类实例化并存储到容器中。当需要使用某个对象时,容器会根据对象的定义信息创建一个新的实例,并自动注入该对象所依赖的其他对象。

什么是DI?

DI(Dependency Injection)即依赖注入,它是IOC的一种实现方式,通过容器自动将所需的依赖注入到需要它们的对象中,从而实现对象之间的解耦。

DI实现了“控制反转”(Inversion of Control,简称IOC)的概念,即将应用程序对组件的控制权交给了容器。容器负责维护对象之间的依赖关系,并在适当的时候将依赖注入到对象中。


IOC和DI的关系及在Spring框架中的应用

IOC和DI是紧密相关的,IOC通过将对象的创建和依赖注入的控制权交给容器,实现了依赖注入。
Spring框架是一个轻量级的IOC容器,通过使用DI实现对象之间的解耦,从而使应用程序更加灵活、可扩展、易维护。
在Spring框架中,容器会自动管理对象之间的依赖关系,从而实现了依赖注入。Spring提供了多种方式来进行依赖注入,包括构造器注入、Setter注入、字段注入等。

项目结构


 首先创建Dao接口

package com.shi.dao;

public interface BookDao {
    public void insert();
}

实现dao接口的实现类

package com.shi.dao.impl;

import com.shi.dao.BookDao;

public class BookDaoImpl implements BookDao {
    @Override
    public void insert() {
        System.out.println("BookDaoImpl...save");
    }
}

service层

BookService 接口

package com.shi.service;

public interface BookService {
 public void  save();
}

实现BookService 的两个类

package com.shi.service.impl;
import com.shi.dao.BookDao;
import com.shi.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;

public class BookServiceImpl implements BookService {
    public   String name;

    public     int age;

    private BookDao bookDao;

    @Override
    public String toString() {
        return "BookServiceImpl{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", bookDao=" + bookDao +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
    @Autowired
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
    public BookServiceImpl(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    public BookServiceImpl() {
        // 默认构造函数体
    }

    @Override
    public void save() {
        System.out.println("BookServiceImpl.......save");
        bookDao.insert();
    }
}

package com.shi.service.impl;

import com.shi.service.BookService;

public class BookServiceVip implements BookService {
    @Override
    public void save() {
        System.out.println("BookServiceVip..............save");
    }
}

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

    <!--把所有对象创建到spring的IOC容器中,并起上名字id:表示给对象起名字class:类的全类名-->
    <bean id="bookDao" class="com.yyz.dao.impl.BookDaoImpl"/>
    <bean id="bookService" class="com.yyz.service.impl.BookServiceImpl ">

        <property name="name" value="张三"></property>
        <property name="age" value="9"></property>
        <property name="bookDao" ref="bookDao"></property>

    </bean>

</beans>

测试层

Test01

package com.shi.servlet;

import com.shi.service.BookService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test01{
    BookService bookService;

    @Test
    public void add() {
        System.out.println("BookServlet...add");
//1.获得IOC容器
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
//2.根据名字从容器中获取对象
        bookService = (BookService) context.getBean("bookService");
        bookService.save();
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值