Spring(三)入门案例DI(依赖注入)

36 篇文章 1 订阅
16 篇文章 6 订阅

DI介绍

DI (Dependency Injection) 依赖注入

首先要明白:
is a:自己是一个什么,在程序中即继承或接口,比如汽车是交通工具。
has a:有一个,程序中即有一个成员变量,换句话说就是类B中的代码有对类A的引用

class B{
    private A a;//B类依赖A类
}

依赖注入解释

依赖:一个对象需要使用另一个对象
注入:通过setter方法进行另一个对象实例设置。

  • 例如:
    class BookServiceImpl{
        //之前开发:接口 = 实现类  (service和dao耦合)
        //private BookDao bookDao = new BookDaoImpl();
        //学习spring之后 (解耦:service实现类使用dao接口,不知道具体的实现类)
        private BookDao bookDao;
        setter方法
   }

要想使用DI 一定要为字段提供setter方法

模拟spring执行过程

创建service实例:BookService bookService = new BookServiceImpl()     -->IoC 配置信息(bean)
创建dao实例:BookDao bookDao = new BookDaoImple()                -->IoC 配置信息(bean)
将dao设置给service:bookService.setBookDao(bookDao);             -->DI   配置信息(property)

目标类

创建目标类的过程为:
* 创建BookService接口和实现类
* 创建BookDao接口和实现类
* 将dao和service配置xml到文件

创建BookService接口和实现类

package com.scx.di.test;

public interface BookService {
    public void addBook();
}
package com.scx.di.test;

public class BookServiceImpl implements BookService{

    private BookDao bookDao;
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
    @Override
    public void addBook() {
        bookDao.addBook();
    }

}

创建BookDao接口和实现类

package com.scx.di.test;

public interface BookDao {
    public void addBook();
}
package com.scx.di.test;

public class BookDaoImpl implements BookDao{

    @Override
    public void addBook() {
        System.out.println("BookDaoImpl add a book.");

    }

}

将dao和service配置xml到文件

模拟Spring过程

创建service实例:BookService bookService = new BookServiceImpl() –>IoC 配置信息(bean)
创建dao实例:BookDao bookDao = new BookDaoImple() –>IoC 配置信息(bean)
将dao设置给service:bookService.setBookDao(bookDao); –>DI 配置信息(property)

<?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 definitions here -->
    <bean id="BookServiceId" class="com.scx.di.test.BookServiceImpl">
        <property name="bookDao" ref="BookDaoId"></property>
    </bean>
    <bean id="BookDaoId" class="com.scx.di.test.BookDaoImpl"></bean>
</beans>

Junit测试

package com.scx.test;

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

import com.scx.di.test.BookDao;
import com.scx.di.test.BookDaoImpl;
import com.scx.di.test.BookService;
import com.scx.di.test.BookServiceImpl;

public class TestDI {
    @Test
    public void testDI(){
        //之前开发
        BookDao bookDao=new BookDaoImpl();
        BookServiceImpl bookService1=new BookServiceImpl();
        bookService1.setBookDao(bookDao);
        bookService1.addBook();

        //学习Spring后
        String xmlPath="com/scx/di/test/applicationContext.xml";
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext(xmlPath);
        BookService bookService2=applicationContext.getBean("BookServiceId",BookService.class);
        bookService2.addBook();
    }
}

运行结果

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值