1 DI

l DI Dependency Injection ,依赖注入

is a :是一个,继承。

has a:有一个,成员变量,依赖。

class B {

private A a; //B类依赖A类

}

依赖:一个对象需要使用另一个对象

注入:通过setter方法进行另一个对象实例设置。

l 例如:

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>

 

1.1 目标类

l 创建BookService接口和实现类

l 创建BookDao接口和实现类

l 将dao和service配置 xml文件

l 使用api测试

1.1.1 dao

public interface BookDao {

 

public void addBook();

 

}

public class BookDaoImpl implements BookDao {

 

@Override

public void addBook() {

System.out.println("di add book");

}

 

}

 

 

1.1.2 service

 

public interface BookService {

 

public abstract void addBook();

 

}

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();

}

 

}

 

 

1.2 配置文件

 

 

<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="com.itheima.b_di.BookServiceImpl">

<property name="bookDao" ref="bookDaoId"></property>

</bean>

 

<!-- 创建dao实例 -->

<bean id="bookDaoId" class="com.itheima.b_di.BookDaoImpl"></bean>

 

 

</beans>

 

 

1.3 测试

@Test

public void demo01(){

//从spring容器获得

String xmlPath = "com/itheima/b_di/beans.xml";

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);

BookService bookService = (BookService) applicationContext.getBean("bookServiceId");

 

bookService.addBook();

 

}