Spring IOC控制反转、DI注入以及配置

1.使用xml的方式进行配置IOC容器,首先引入依赖

在Resource资源下配置,applicationContext.xml ,刷新mevan后可以直接选择配置spring.xml文件

<!--    spring核心用来管理bean    --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency>

 applicationContext.xml 

配置bean: 

id:实现标识给bean起名字

class属性标识给这个bean对象定义类型

name:属性是可以给当前bean起别名(使用“ ”,“,”,“;”分隔开来)

singleton:单例(默认)

prototype:非单例

<?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 id="bookDAO" class="org.itheima.dao.impl.BookDAOImpl"/><bean id="bookService" class="org.itheima.service.impl.BookServiceImpl"/>
</beans>

现在配置DAO层:

public interface BookDAO {public void book();
}
public class BookDAOImpl implements BookDAO {@Overridepublic void book() {System.out.println("BookDAO……");}
}

Service层:

public interface BookService {public void write();
}
public class BookServiceImpl implements BookService {private BookDAO bookDAO = new BookDAOImpl();@Overridepublic void write() {System.out.println("BookService……");}
}

测试文件1:

public class BookDAOTest {@Testpublic void book() {ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");BookDAO bookDAO = (BookDAO) ctx.getBean("bookDAO");bookDAO.book();}
}

打印结果: 

测试文件2: 

public class BookServiceTest {@Testpublic void write() {ClassPathXmlApplicationContext txc = new ClassPathXmlApplicationContext("applicationContext.xml");BookService bookService = (BookService) txc.getBean("bookService");bookService.write();}
}

打印结果:  

 

依赖  new ClassPathXmlApplicationContext("applicationContext.xml")的方式不太合适,同样是创建对象的形式,那不如直接new一个实体DAO,因此此方法需要改进!!

2.使用dao与Service的关系

与以上不同的是BookServiceImpl与测试类不同: 

public class BookServiceImpl implements BookService {
private BookDAO bookDAO = new BookDAOImpl();@Overridepublic void write() {bookDAO.book();System.out.println("BookService……");}
}

 测试类:

public class BookServiceImplTest {@Testpublic void testWrite() {ClassPathXmlApplicationContext cax = new ClassPathXmlApplicationContext("applicationContext.xml");BookService bookService = (BookService) cax.getBean("bookService");bookService.write();}
}

测试结果:

3.使用DI注入 bean实例,并且使用service 调用dao层方法

首先配置Service的依赖关系properties

 properties:配置当前bean的属性

name属性标识配置哪一个具体的属性

ref属性表示参照哪个bean对象

<?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 id="bookDAO" class="org.itheima.dao.impl.BookDAOImpl"/><bean id="bookService" class="org.itheima.service.impl.BookServiceImpl"><property name="bookDAO" ref="bookDAO"/></bean>
</beans>

dao层:

public interface BookDAO {public void book();
}
public class BookDAOImpl implements BookDAO {@Overridepublic void book() {System.out.println("BookDAO……");}
}

 service层:

public interface BookService {public void write();
}

通过容器将bookDAO对象传入进去 

public class BookServiceImpl implements BookService {private BookDAO bookDAO;@Overridepublic void write() {bookDAO.book();System.out.println("BookService……");}public void setBookDAO(BookDAO bookDAO) {this.bookDAO = bookDAO;}
}

测试类:

public class BookServiceImplTest {
private BookService bookService;@Testpublic void write() {ClassPathXmlApplicationContext cax = new ClassPathXmlApplicationContext("applicationContext.xml");BookService bookService = (BookService) cax.getBean("bookService");bookService.write();}
}

测试结果:

4.动态工厂bean的实例化:

DAO层: 

public interface BookDAO {public void book();
}

实例化工厂:

public class FactoryImpl implements FactoryBean<BookDAO> {@Overridepublic BookDAO getObject() throws Exception {System.out.println("工厂正在创造DAO对象......");return new BookDAOImpl();}@Overridepublic Class<?> getObjectType() {return BookDAO.class;}@Overridepublic boolean isSingleton() {return true;}
}

 配置文件:

<?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 id="bookService" name="service" class="org.itheima.service.impl.BookServiceImpl"><property name="bookDAO" ref="bookDAO"/></bean><bean id="bookDAO" class="org.itheima.factory.FactoryImpl"/>
</beans>

 测试文件:

public class BookDAOTest {@Testpublic void book() {ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");BookDAO bookDAO = (BookDAO) ctx.getBean("bookDAO");bookDAO.book();}
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/589170.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

是什么引起LED显示屏发生故障?

LED显示屏作为一种高科技的显示解决方案&#xff0c;虽然具有许多优势&#xff0c;但在使用过程中也可能会出现故障。了解引起LED显示屏故障的因素&#xff0c;对于预防问题和及时维修至关重要。以下是一些常见的导致LED显示屏发生故障的原因&#xff1a; 电源问题&#xff1a;…

设计模式12--组合模式

定义 案例一 案例二 优缺点

C++:命名空间namescape,缺省参数

文章目录 1.命名空间namescape1.1命名空间namescape定义1.2命名空间namescape规则 2.2 命名空间使用3 C输入&输出4. 缺省参数 1.命名空间namescape 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在于全局作用域…

烂笔头笔记:Windows 11下照片查看器显示偏色问题修复

本文出处&#xff1a;http://blog.csdn.net/chaijunkun/article/details/137278931&#xff0c;转载请注明。由于本人不定期会整理相关博文&#xff0c;会对相应内容作出完善。因此强烈建议在原始出处查看此文。 最近在研究HDR视频的截图算法&#xff0c;目的就是生成色彩正确…

【JavaWeb】Day25.Web入门——HTTP协议(一)

HTTP协议——概述 1.介绍 HTTP&#xff1a;Hyper Text Transfer Protocol(超文本传输协议)&#xff0c;规定了浏览器与服务器之间数据传输的规则。 http是互联网上应用最为广泛的一种网络协议http协议要求&#xff1a;浏览器在向服务器发送请求数据时&#xff0c;或是服务器在…

华为数通方向HCIP-DataCom H12-821题库(多选题:261-280)

第261题 VRRP可以结合以下哪些机制或技术来监视上行链路的连通性? A、IP-Link B、BFD C、NQA D、接口Track 【正确答案】BCD 【答案解析】 第262题 以下关干RSTP根保护的说法正确的是? A、根端口上开启根保护功能会生效 B、开启根保护的端口再收到优先级更高的RSTBPDU之后如…

经典文献阅读之--i-Octree(用于最近邻搜索的快速、轻量级和动态的八叉树)

0. 简介 在众多机器人应用中&#xff0c;通过最近邻搜索建立新采集点与历史累积数据&#xff08;即地图&#xff09;之间的对应关系至关重要。然而&#xff0c;静态树数据结构不足以实时处理大型且动态增长的地图。为了解决这个问题&#xff0c;我们在文中《i-Octree: A Fast,…

HarmonyOS NEXT应用开发之MVVM模式

应用通过状态去渲染更新UI是程序设计中相对复杂&#xff0c;但又十分重要的&#xff0c;往往决定了应用程序的性能。程序的状态数据通常包含了数组、对象&#xff0c;或者是嵌套对象组合而成。在这些情况下&#xff0c;ArkUI采取MVVM Model View ViewModel模式&#xff0c;其…

使用deepspeed小记

1. 减少显存占用的历程忠告 医学图像经常很大&#xff0c;所以训练模型有时候会有难度&#xff0c;但是现在找到了很多减少显存的方法。 不知道为什么&#xff0c;使用transformers的trainer库确确实实会减少显存的占用&#xff0c;即使没有使用deepspeed&#xff0c;占用的显…

nginx与tomcat的区别?

关于nginx和tomcat的概念 网上有很多关于nginx和tomcat是什么东西的定义&#xff0c;我总结了一下: tomcat是Web服务器、HTTP服务器、应用服务器、Servlet容器、web容器。 Nginx是Web服务器、HTTP服务器、正向/反向代理服务器&#xff0c;。 这里有两个概念是交叉的&#xff…

网络编程套接字应用分享【Linux C/C++ 】【UDP应用 | TCP应用 | TCP线程池小项目】

目录 前提知识 1. 理解源ip&#xff0c;目的ip和Macip 2. 端口号 3. 初识TCP&#xff0c;UDP协议 4. 网络字节序 5. socket 编程 sockaddr类型 一&#xff0c;基于udp协议编程 1. socket——创建套接字 2. bind——将套接字强绑定 3. recvfrom——接受数据 4. s…

深入探索:主流低代码开发平台的应用场景及开发流程

前言&#xff1a; 2014年&#xff0c;全球权威资讯机构 Forrester 首次在报告中引入了低代码的概念&#xff0c;放眼彼时的中国市场&#xff0c;低代码这一名词还鲜为人知。 直到近几年&#xff0c;随着国家积极推动数字经济&#xff0c;大力扶持企业数字化发展《加强数字化发…