Spring IoC与DI(依赖注入)
Spring Ioc
所谓控制反转,即将传统的需要代码进行的操作,交由Spring容器来做。下面以添加book为例进行比较一下:
BookService.java
public interface BookService {
void addBook();
}
BookServiceImpl .java
public class BookServiceImpl implements BookService {
@Override
public void addBook() {
System.out.println("add book by ioc");
}
}
Spring 配置文件
<?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="bookService" class="[包名].bookServiceImpl"></bean>
</beans>
测试:
public class TestIoc {
@Test
public void demo01(){
//传统方法
BookService bookService= new bookServiceImpl();
bookService.addBook();
}
@Test
public void demo02(){
//从spring容器获得
//1 获得容器
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("com/spring/ioc/beans.xml");
//2获得内容 --不需要自己new,都是从spring容器获得
BookService bookService= (BookService ) applicationContext.getBean("bookService");
bookService.addBook();
}
}
DI(Dependency Injection)
has a:有一个,成员变量,依赖。
class B {
private A a; //B类依赖A类
}
依赖:一个对象需要使用另一个对象
注入:通过setter方法进行另一个对象实例设置。
举例如下:
public interface BookDao {
void save();
}
public class BookDaoImpl implements BookDao{
@Override
public void save(){
System.out.println("DI -> add a book");
}
}
public interface BookService {
void addBook();
}
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public void setBookDao(BookDao bookDao){
this.bookDao=bookDao;
}
@Override
public void addBook() {
this.bookDao.save();
}
}
public class TestDI {
@Test
public void demo01(){
String xmlPath = "com/*/spring/ioc2/beans.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
BookService bookService = (BookService) applicationContext.getBean("bookService");
bookService.addBook();
}
}
<?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执行过程
创建service实例:BookService bookService = new BookServiceImpl() IoC <bean>
创建dao实例:BookDao bookDao = new BookDaoImpl() IoC
将dao设置给service:bookService.setBookDao(bookDao); DI <property>
<property> 用于进行属性注入
name: bean的属性名,通过setter方法获得
ref :另一个bean的id值的引用
-->
<bean id="bookService" class="[包名].BookServiceImpl">
<property name="bookDao" ref="bookDao"></property>
</bean>
<bean id="bookDao" class="[包名].BookDaoImpl"></bean>
</beans>
大家有兴趣也可以关注我的公众号查看文章。
------愿来生只做陌上的看花人,无须入尘缘,仅行于陌上,看一川风花,无爱无伤-----