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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)