Spring之控制反转IoC与依赖注入DI讲解——bean
1. 最终目录
2. 代码示例
(1)BookDaoImpl.java 与 BookServiceImpl.java
package com.hung.dao.Impl;
import com.hung.dao.BookDao;
import com.hung.service.Impl.BookServiceImpl;
public class BookDaoImpl implements BookDao {
public void say() {
System.out.println("执行了dao的say()...");
}
// 配置bean初始化时和销毁前操作的方法
public void init() {
// do something;
System.out.println("init...");
}
public void destroy() {
// do something;
System.out.println("destroy...");
}
}
package com.hung.service.Impl;
import com.hung.dao.BookDao;
import com.hung.dao.Impl.BookDaoImpl;
import com.hung.service.BookService;
public class BookServiceImpl implements BookService {
// 5.业务层中使用不使用new方式创建dao对象
// private BookDaoImpl bookDao = new BookDaoImpl();
private BookDao bookDao;
// 7.提供对应的set方法
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public void say() {
System.out.println("执行了service的say()...");
// 执行dao的say()
bookDao.say();
}
}
(2)pom.xml
<?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-IoC</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- spring依赖 -->
<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.13</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
(3)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.在pom文件导入spring坐标:spring-context;创建此配置文件 -->
<!-- 2.IoC: 配置bean,解耦:解决new对象的藕合问题 -->
<!-- 2.1 除id外,还可以用name设别名,别名可多个,作用和id基本等同 -->
<!-- 用method配置bean的生命周期函数,也可用接口实现:自行查阅 -->
<bean id="bookDao" name="dao myDao" class="com.hung.dao.Impl.BookDaoImpl" init-method="init" destroy-method="destroy"/>
<!-- 2.2 还可以用scope设置bean创建时为非单例
非单例耗性能,因此:
适合给容器管理的bean: 表现层、业务层、数据层、工具 对象
不适合的: 封装的实体对象
<bean id="bookDao" name="dao myDao" class="com.hung.dao.Impl.BookDaoImpl" scope="prototype" />
-->
<bean id="bookService" class="com.hung.service.Impl.BookServiceImpl">
<!-- 6.DI: 配置service与dao的关系 -->
<property name="bookDao" ref="bookDao"/>
</bean>
<!--
bean的实例化的3种方式:
1.构造方法实例化:以上就是此方法(常用)
2.静态工厂实例化(了解)
3.实例工厂实例化(了解)
-->
</beans>
(4)App.java
package com.hung;
import com.hung.service.BookService;
import com.hung.service.Impl.BookServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
/**
* 测试
* 不用spring
* new一个service,并执行它的say()
*/
/*
BookServiceImpl bookService = new BookServiceImpl();
bookService.say();
*/
/**
* 使用spring方法
*/
// 3.获取IoC容器
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
// 4.获取bean,主意:得到的是Object类型,需强转换成BookService类型
BookService bookService = (BookService) ctx.getBean("bookService");
bookService.say();
// 关闭容器,即bean的销毁
// ctx.close(); // 太暴力
ctx.registerShutdownHook();
}
}
本文来自博客园,作者:RHCHIK,转载请注明原文链接:https://www.cnblogs.com/suihung/p/16608552.html