spring di

di
dependency injection 依赖注入

is a,是一个,继承
has a,有一个,成员变量,依赖
依赖,一个对象需要另一个对象
注入,通过setter方法进行另一个对象实例设置

class B{
    private A a;//B依赖A类
}
class BookServiceImpl{
        //之前开发:接口 = 实现类  (service和dao耦合)
        //private BookDao bookDao = new BookDaoImpl();
        //spring之后 (解耦:service实现类使用dao接口,不知道具体的实现类)
        private BookDao bookDao;
        setter方法
   }
    模拟spring执行过程
    创建service实例:BookService bookService = new BookServiceImpl()     -->IoC  <bean>
    创建dao实例:BookDao bookDao = new BookDaoImple()                -->IoC
    将dao设置给service:bookService.setBookDao(bookDao);             -->DI   <property>
public class BookServiceImpl implements BookService {

    // 方式1:之前,接口=实现类
//  private BookDao bookDao = new BookDaoImpl();
    // 方式2:接口 + setter
    private BookDao bookDao;
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    @Override
    public void addBook(){
        this.bookDao.addBook();
    }

}
<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执行过程
        创建service实例:BookService bookService = new BookServiceImpl() IoC  <bean>
        创建dao实例:BookDao bookDao = new BookDaoImpl()         IoC
        将dao设置给service:bookService.setBookDao(bookDao);     DI   <property>

        <property> 用于进行属性注入
            name: bean的属性名,通过setter方法获得
                setBookDao ##> BookDao  ##> bookDao
            ref :另一个bean的id值的引用
     -->

    <!-- 创建service -->
    <bean id="bookServiceId" class="BookServiceImpl">
        <property name="bookDao" ref="bookDaoId"></property>
    </bean>

    <!-- 创建dao实例 -->
    <bean id="bookDaoId" class="cBookDaoImpl"></bean>


</beans>

版权声明:本文为lovelovelovelovelo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。