需求分析:将BookServiceImpl和BookDaoImpl交给Spring管理,并从容器中获取对应的bean对象进行方法调用。
一、创建Maven的java项目
二、2.pom.xml添加Spring的依赖jar包
js
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
三、创建BookDao,BookDaoImpl,BookService和BookServiceImpl四个类
BookDao
js
public interface BookDao {
public void save();
}
BookDaoImpl
js
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
}
BookService
js
public interface BookService {
public void save();
}
BookServiceImpl
js
public class BookServiceImpl implements BookService {
private BookDao bookDao = new BookDaoImpl();
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
四、resources下添加spring配置文件
右键 -> 新建 -> XML配置文件 -> Spring配置
五、在配置文件中完成bean的配置
js
<?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标签标示配置bean
id属性标示给bean起名字
class属性表示给bean定义类型,
得是具体的实现类而不是接口,要靠这个造对象的
-->
<bean id="bookDao" class="com.blog.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.blog.service.impl.BookServiceImpl"/>
</beans>
⚠️
注意事项:bean定义时id属性在同一个上下文中(配置文件)不能重复
六、获取IOC容器
使用Spring提供的接口完成IOC容器的创建,创建App类,编写main方法
js
public class App {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
七、从容器中获取对象进行方法调用 使用getBean(String name)方法,其name参数就是我们在bean配置的id,通过这个id来造对象
js
public class App {
public static void main(String[] args) {
// 3.获取IOC容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 4.获取bean
BookService bookService = (BookService) context.getBean("bookService");
bookService.save();
}
}
八、运行程序
测试结果如下
js
book service save …
book dao save …
总结
至此,Spring的IOC入门案例已经完成,但是在BookServiceImpl的类中依然存在BookDaoImpl对象的new操作,它们之间的耦合度还是比较高,这块该如何解决,就需要用到下面的DI(依赖注入)。