用Spring来实现IOC

在上节中我们自定义了一个接口BeanFactory和类ClassPathXmlApplicationContext来模拟Spring,其实它们在Spring中确实是存在的,下面我们具体来看看Spring的控制反转是如何操作的

其他代码一样,只是配置文件和单元测试的代码有点不同,注意引用其他bean配置的是"ref"属性

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl"></bean>    <bean id="userService" class="com.bjsxt.service.UserService"><property name="userDAO" ref="u" /></bean></beans>

配置文件

package com.bjsxt.service;
import org.junit.Test;import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;import com.bjsxt.model.User;//Dependency Injection
//Inverse of Control
public class UserServiceTest {@Testpublic void testAdd() throws Exception {        BeanFactory ctx = new ClassPathXmlApplicationContext("beans.xml");UserService service = (UserService)ctx.getBean("userService");User u = new User();u.setUsername("zhangsan");u.setPassword("zhangsan");service.add(u);}}

测试代码

注:ClassPathXmlApplicationContext继承ApplicationContext,ApplicationContext又继承BeanFactory,所以也可以这样写ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");推荐使用这种写法。其构造函数也可以传入String数组,适用于多个配置文件的情况

三种注入方式(setter,构造函数,接口)

setter已经见过了,接口注入很少用,故此忽略,下面来看一下构造函数注入,在UserService中添加一个构造函数初始化UserDAO属性

package com.bjsxt.service;
import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;public class UserService {private UserDAO userDAO;  public void add(User user) {userDAO.save(user);}public UserDAO getUserDAO() {return userDAO;}public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}public UserService(UserDAO userDAO) {super();this.userDAO = userDAO;}
}

添加构造函数的UserService

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl"></bean><bean id="userService" class="com.bjsxt.service.UserService"><!-- <property name="userDAO" ref="u" />--><constructor-arg><ref bean="u"/></constructor-arg></bean></beans>

配置文件

注意用的是constructor-arg标签,如果构造函数有多个参数,就按照顺序写,或者指定index

Bean的Scope属性

配置文件中bean有个scope属性,如果配置为singleton,表示该bean只有一个实例,如果配置为prototype,每次取出该bean都会创建一个新的对象。bean的scope属性配置为singleton和prototype,在下面的代码中会分别输出true和false

package com.bjsxt.service;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.bjsxt.model.User;//Dependency Injection
//Inverse of Control
public class UserServiceTest {@Testpublic void testAdd() throws Exception {ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");UserService service = (UserService)ctx.getBean("userService");UserService service2 = (UserService)ctx.getBean("userService");System.out.println(service == service2);User u = new User();u.setUsername("zhangsan");u.setPassword("zhangsan");service.add(u);}}

UserService测试scope属性

转载于:https://www.cnblogs.com/SamFlynn/p/4597718.html

尚学堂Spring视频教程(二):Spring控制反转相关推荐

  1. Spring(二)控制反转

    控制反转是Spring框架的核心,用来消减计算机程序的耦合问题.依赖注入是IoC的另一种方法,只是从不同的角度上来描述的. 通过·面向对象思想讨论控制反转和依赖注入两个概念. 当某个java对象(调用 ...

  2. spring学习笔记 -- day02 spring基础、IOC控制反转

    一:srping的介绍 1.spring的体系结构 2.spring资源 a.spring-framework-4.2.4.RELEASE:Spring Framework的官方发行包 b.sprin ...

  3. Spring概述及IOC(控制反转) Part I

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Spring概述 1.Spring的模块划分图: 2.Spring主要由(IOC+AOP)构成: ioc的创建方式 ...

  4. 尚学堂j2ee视频教程

    尚学堂j2ee视频教程 简介:本课程从最初级的Java开始授课,一直讲授至J2EE.由浅入深, 手把手的讲课风格,深入讲解jsp&servlet. Struts.Spring.Hibernat ...

  5. Spring框架中IoC(控制反转)的原理

    一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑.即软件系统中对象之间的耦合,对 ...

  6. Spring中的IoC(控制反转)和DI(依赖注入)

    一.Spring IoC的基本概念 控制反转(IoC) 是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心. 依赖注入(DI) 是IoC的另外一种说法,只是从不同的角度 ...

  7. Spring学习:IOC控制反转

    一.Spring概述: Spring是一个开源框架,其存在的根本使命就是简化JAVA开发.为了降低JAVA开发的复杂性,Spring采取了以下四种关键策略: 基于POJO的最轻量级和最小侵入性编程: ...

  8. ioc spring 上机案例_IOC(控制反转)—最后的爱,是放手

    [摘要]Spring框架的一个重要理念之一,就是IOC,英文全拼为Inversion of Control, 中文翻译为控制反转,这是一个非常伟大的理念,不应该只是在程序中被提及. 某些教程,因为缺乏 ...

  9. spring框架ioc(控制反转)第二讲

    配置applicationContext.xml: spring的ioc容器的配置文件:applicationContext.xml(默认名称) 配置schema约束: http://www.spri ...

  10. [Js-Spring]Spring与IoC(控制反转,Inversion of Control)

    控制反转(Ioc,Inversion of Control),是一个概念,一种思想.指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理.控制反转就是对对象控制权的转移,从 ...

最新文章

  1. 改变jupyter notebook的主题背景颜色
  2. 编程之美3.2 电话号码对应英语字母
  3. 信息系统项目管理师复习第2小时
  4. MySQL之事务隔离级别--转载
  5. 关于redis的keys命令的性能问题
  6. 使用spring boot +WebSocket实现(后台主动)消息推送
  7. c#winform控件过多卡顿问题解决方案
  8. 解封装(三):AVFormatContext分析
  9. Youki的C++命名规则
  10. Ant + Jenkies +Tomcat 自动构建部署Web项目
  11. ctfhub(rce智慧树)
  12. Firefox必备的24款web开发插件
  13. 怎么更换电脑的默认浏览器?
  14. Mac环境下Tron 部署教程
  15. 串口调试助手使用说明
  16. android apk可安装成功但无法运行提示dex文件异常
  17. jquery 筛选选择器 下拉菜单
  18. 【软件测试】——接口测试简介
  19. MyBatis从入门到精通(九):MyBatis高级结果映射之一对一映射
  20. 大数据与企业的数据化运营

热门文章

  1. hdu1521(指数母函数)
  2. Android7.1 Presentation双屏异显原理分析
  3. TENSORFLOW GUIDE: EXPONENTIAL MOVING AVERAGE FOR IMPROVED CLASSIFICATION
  4. JZOJ 5638. 【NOI2018模拟4.8】IIIDX
  5. JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨
  6. linux 指定库名 登录mysql_Linux下指定mysql数据库数据配置主主同步的实例
  7. 链接哈希是什么_熊猫人行情:什么是工作量证明机制(POW)
  8. 计算机无法找到实达打印机,实达打印机使用方法教程
  9. matlab randint函数
  10. AtCoder AGC004E Salvage Robots (DP)