spring框架的IOC、Di入门

什么是Spring框架Spring框架是一个开源的Java应用程序框架,旨在降低企业级应用程序开发的复杂性。它提供了一套全面的基础设施支持,包括控制反转(IoC)、依赖注入(DI)、AOP、数据访问、事务管理、Web应用程序开发等功能。Spring框架的设计理念是基于“简单、一致、高效”的原则,并具有高度可扩展性和灵活性,可以与其他开源技术和工具无缝集成。它已经成为了Java企业级应用程序开发的事实标准之一。

Ioc的概念:

IOC(Inversion of Control)即控制反转,是Spring框架的核心概念之一。传统的程序开发模式中,程序员通过new关键字创建对象、调用方法等来控制对象的生命周期和行为。而在IoC模式下,控制权由程序员转移到了容器中,由容器负责创建、管理和控制对象的生命周期和行为。

IoC的实现方式是依赖注入(Dependency Injection,简称DI),它通过注入对象依赖关系来解决类与类之间的耦合性,使得程序更加灵活、可扩展和易于维护。使用IoC和DI可以有效地降低代码的耦合度,提高代码的复用性和可测试性,从而提高开发效率和质量。

Di的概念:

DI(Dependency Injection),即依赖注入,是实现IoC的一种方式。它通过将对象之间的依赖关系交给外部容器来管理,从而降低对象之间的耦合度和提高代码的可维护性、可重用性和可测试性。

在DI中,程序员不再通过new关键字直接创建对象,而是通过构造函数、工厂方法或者属性注入等方式,由Spring容器负责创建相应的对象,并将其注入到需要它们的地方。这样做的好处是,对象之间的依赖关系被明确地声明出来,可以轻松地替换或者修改依赖关系,而不会影响到其他部分的代码。

Spring框架提供了多种注入方式,包括构造函数注入、Setter方法注入、字段注入等,可以根据实际情况选择合适的注入方式。

案例:

1、导入jar包

 2、创建分层结构并书写接口与实现类

dao层 

接口:

package com.liu.dao;

public interface BookDao {
    void opp();
}

实现类:

package com.liu.dao;

public class BookDaoInpl implements BookDao{
    @Override
    public void opp() {
        System.out.println("opp-------");
    }
}

serivce层

接口:

package com.liu.serivce;

public interface BookSreivce {
    void add();
}

impl层(实现类)

package com.liu.serivce.impl;

import com.liu.serivce.BookSreivce;

/**
 * 该类为实现了"BookSreivce"接口的服务实现类
 */
public class BookSerivceImpl implements BookSreivce {

    /**
     * 实现了"BookSreivce"接口中定义的"add()"方法
     */
    @Override
    public void add() {
        System.out.println("add----- impl"); 
    }
}
package com.liu.serivce.impl;

import com.liu.dao.BookDao;
import com.liu.serivce.BookSreivce;

/**
 * 该类实现了"BookSreivce"接口,用于对书籍进行添加等操作,
 * 它引入了"BookDao",在"add()"方法中使用"bookDao"。
 */
public class BookSerivceVip implements BookSreivce {

    /**
     * 返回一个"BookDao"对象
     * @return "BookDao"对象
     */
    public BookDao getBookDao() {
        return bookDao;
    }

    /**
     * 设置"BookDao"对象
     * @param bookDao 要设置的"BookDao"对象
     */
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    BookDao bookDao; // 声明一个"BookDao"类型的变量

    /**
     * 实现了"BookSreivce"接口中定义的"add()"方法,
     */
    @Override
    public void add() {
        System.out.println("Vip--------add");
        bookDao.opp();
    }
}

3、配置核心配置文件

<?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">
       
    <!-- 定义一个名为"bookDaoInpl"的bean -->
    <bean id="bookDaoInpl" class="com.liu.dao.BookDaoInpl"/>
    
    <!-- 定义一个名为"bookSerivce"的bean,并引用"bookDaoInpl" -->
    <bean id="bookSerivce" class="com.liu.serivce.impl.BookSerivceVip">
        <property name="bookDao" ref="bookDaoInpl"/> 
    </bean>
</beans>

4、servlet层(测试类)

package com.liu.servlet;

import com.liu.serivce.BookSreivce;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 该类用于测试"BookSreivce"
 */
public class Test01 {
    BookSreivce bookSreivce; // 声明一个"BookSreivce"类型的变量

    /**
     * 测试方法,用于检测"BookSreivce"
     */
    @Test
    public void Test01(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); // 加载Spring配置文件
        bookSreivce = (BookSreivce) context.getBean("bookSerivce"); // 获取"bookSerivce" bean
        bookSreivce.add(); // 调用"add()"方法
    }
}

测试结果:

当核心配置文件 bookSerivce的类指定为com.liu.serivce.impl.BookSerivceImpl

当核心配置文件 bookSerivce的类指定为com.liu.serivce.impl.BookSerivceVip 

 

猜你喜欢

转载自blog.csdn.net/weixin_69420643/article/details/129756316