当前位置: 首页 > news >正文

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();}
}

运行结果:

相关文章:

  • 解决nginx代理后,前端拿不到后端自定义的header
  • STM32重要参考资料
  • 企业案例:金蝶云星空集成钉钉,帆软BI
  • 【bugfix】如何解决svg到线上显示空白或者svg的viewBox为空
  • 【群晖】白群晖如何公网访问
  • 试过了,ChatGPT确实不用注册就可以使用了!
  • 3. WiFi基本原理
  • js 中toLocaleString的用法
  • 设计模式之旅:工厂模式全方位解析
  • 【MySQL】多表查询全解-【多表关系/内外自连接/子查询/多表查询案例链接】(可cv代码&案例演示)
  • QT子窗口关闭时自动释放及注意事项
  • VSCode好用插件
  • 手写简易操作系统(十一)--可编程中断控制器8259A
  • Vue-Electron配置及踩坑
  • 每日一题 第六十六期 洛谷 小朋友排队
  • (三)从jvm层面了解线程的启动和停止
  • [译]如何构建服务器端web组件,为何要构建?
  • 《深入 React 技术栈》
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • flask接收请求并推入栈
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript设计模式系列一:工厂模式
  • Laravel 中的一个后期静态绑定
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • vue数据传递--我有特殊的实现技巧
  • 计算机常识 - 收藏集 - 掘金
  • 聚类分析——Kmeans
  • 码农张的Bug人生 - 见面之礼
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 源码安装memcached和php memcache扩展
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • gunicorn工作原理
  • 选择阿里云数据库HBase版十大理由
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​渐进式Web应用PWA的未来
  • # Panda3d 碰撞检测系统介绍
  • (31)对象的克隆
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (十)T检验-第一部分
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)母版页和相对路径
  • (轉貼) UML中文FAQ (OO) (UML)
  • *Django中的Ajax 纯js的书写样式1
  • .NET 发展历程
  • .Net中ListT 泛型转成DataTable、DataSet
  • @Bean注解详解
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色