1.BookDao接口
package com.study.dao;
public interface BookDao {
void save();
}
2.BookDaoImpl实现类
package com.study.dao.impl;
import com.study.dao.BookDao;
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save...");
}
}
3.BookService接口
package com.study.service;
public interface BookService {
void save();
}
4.BookServiceImpl实现类
package com.study.service.impl;
import com.study.dao.BookDao;
import com.study.dao.impl.BookDaoImpl;
import com.study.service.BookService;
public class BookServiceImpl implements BookService {
BookDao b=new BookSerciveImpl();
public void save() {
System.out.println("book service save...");
b.save();
}
}
5.Test测试类
import com.study.service.BookService;
import com.study.service.impl.BookServiceImpl;
public class Test {
public static void main(String[] args) {
BookService bs=new BookServiceImpl();
bs.save();
}
}
/*
book service save...
book dao save...
*/
程序是主动创建对象!控制权在程序猿手上!

控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法。没有IoC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。
采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。


改进1.案例
导入坐标:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Spring-Demo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
applicationContext.xml配置:
<?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">
<!--1.导入Spring坐标-->
<!--2.配置Bean,通过bean标识配置bean-->
<!--id属性给Bean起名字
class属性定义类型-->
<bean id="bookDao" class="com.study.dao.impl.BookDaoImpl"></bean>
<bean id="bookService" class="com.study.service.impl.BookServiceImpl">
<property name="b" ref="bookDao"></property>
</bean>
</beans>
1.BookDao接口
package com.study.dao;
public interface BookDao {
void save();
}
2.BookDaoImpl实现类
package com.study.dao.impl;
import com.study.dao.BookDao;
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save...");
}
}
3.BookService接口
package com.study.service;
public interface BookService {
void save();
}
4.BookServiceImpl实现类
package com.study.service.impl;
import com.study.dao.BookDao;
import com.study.dao.impl.BookDaoImpl;
import com.study.service.BookService;
public class BookServiceImpl implements BookService {
private BookDao b;
public void save() {
System.out.println("book service save...");
b.save();
}
public void setB(BookDao b) {
this.b = b;
}
}
5.Test测试类
import com.study.service.BookService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test2 {
public static void main(String[] args) {
//获取IOC容器
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取Bean
BookService bs = (BookService) context.getBean("bookService");
bs.save();
}
}
/*
book service save...
book dao save...
*/