一、Spring IoC 容器的启动

想要学习 Spring IoC 一定是需要先知道怎么把 Spring 容器启动起来。根据开发环境的不同,Spring IoC 容器的启动方式也不同。

JavaSE 环境下容器的启动方式有三种,分别为:

ClassPathXmlApplicationContext:从 classpath(类的根路径)下加载配置⽂件(推荐使⽤)

FileSystemXmlApplicationContext:从磁盘绝对路径上加载配置⽂件(不推荐)

AnnotationConfigApplicationContext:纯注解模式下启动 Spring 容器

Java Web 环境下容器的启动方式有两种,分别为:

  1. 新纯注解模式下,web.xml 通过加载 Spring 配置文件进行启动
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>spring-ioc-aop-xml</display-name><!--设置 Spring IoC 配置文件--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!--添加 Spring web 容器启动监听--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener></web-app>
  1. 纯注解模式下,webxml 通过加载 Spring 配置类进行启动
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>spring-ioc-aop-xml</display-name><!--设置 ContextloaderListener 为通过配置类的方式启动 Spring--><context-param><param-name>contextClass</param-name><param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value></context-param><!--设置 Spring IoC 配置文件--><context-param><param-name>contextConfigLocation</param-name><param-value>com.idol.Config</param-value></context-param><!--添加 Spring web 容器启动监听--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener></web-app>

二、纯 xml 文件方式配置 Spring

通过纯 xml 配置文件实例化 Bean 的方式有三种:

  1. 通过构造函数实例化。该过程,可通过无参、有参构造函数实例化对象,同时可对属性的赋值。需要注意的是:如果多个对象都通过有参构造函数实例化对象,且彼此依赖。这种循环依赖问题的出现会导致对象初始化失败。
  2. 通过静态方法实例化。
  3. 通过实例化方法实例化。
<?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.xsd"><!--  ↓↓↓↓  Bean 的实例化方式(一):通过构造函数实例化  ↓↓↓↓  --><bean id="employeeDao" class="com.idol.dao.impl.EmployeeDao"></bean><bean id="employee" class="com.idol.pojo.Employee"><!--为属性设置默认值。 注意:通过 xml 为属性赋值时,被赋值的属性必须有 set 方法--><property name="name" value="Tom"/></bean><bean id="company" class="com.idol.pojo.Company"><!--当属性的类型为对象引用时,我们可以使用 ref 属性,来为对象赋值--><property name="boss" ref="employee"/></bean><!--实例化非空构造函数对象。 注意:实例化多个非空构造函数对象时,如果产生循环引用,则会倒导致系统错误!--><bean id="employeeService" class="com.idol.service.impl.EmployeeService"><!--为构造函数中的对象引用赋值--><constructor-arg name="employeeDao" ref="employeeDao"/></bean><!-- 多参数构造函数实例化对象 --><bean id="constructorParameterBean" class="com.idol.pojo.ConstructorParameterBean"><!--通过参数索引赋值--><constructor-arg index="0" value="有惨构造测试"/><!--通过参数名赋值--><constructor-arg name="myArray"><!--为数组类型赋值--><array><value>嘿嘿嘿</value><value>哈哈哈</value><value>嘻嘻嘻</value></array></constructor-arg><!--为 List 赋值--><property name="myList"><list><value>唧唧唧</value><value>嘎嘎嘎</value></list></property><!--为 Map 添加引用类型的值--><property name="myMap"><map><entry key="employee" value-ref="employee"></entry><entry key="company" value-ref="company"></entry></map></property><!--为 Set 类型赋值--><property name="mySet"><set><value>aaa</value><value>bbb</value></set></property><!--为 Properties 类型赋值--><property name="myProperties"><props><prop key="ccc">ccc</prop><prop key="ddd">ddd</prop></props></property></bean><!--  ↓↓↓↓  Bean 的实例化方式(二):通过静态方法实例化  ↓↓↓↓  --><bean id="staticMethodInitObject" class="com.idol.pojo.StaticMethodInitObject" factory-method="getInstance"></bean><!--  ↓↓↓↓  Bean 的实例化方式(三):通过实例化方法获取 Bean  ↓↓↓↓  --><bean id="employeeBeanFactory" class="com.idol.pojo.EmployeeBeanFactory"></bean><bean id="createdByFactroyEmployee" factory-bean="employeeBeanFactory" factory-method="createEmployeeBean"/><!--  ↓↓↓↓  Bean 声明周期配置(默认 scope 为单例模式)  ↓↓↓↓  --><bean id="prototypeScopeBean" class="com.idol.pojo.PrototypeScopeBean" scope="prototype"/><!--  ↓↓↓↓  Spring 初始化与销毁 Bean 回调  ↓↓↓↓  --><bean id="initMethodAndDestoryMethodBean" class="com.idol.pojo.InitMethodAndDestoryMethodBean" init-method="initCallBack" destroy-method="destoryCallBack"/></beans>

三、xml 与 注解相结合配置 Spring

  1. xml 与注解相结合的方式是企业级开发中经常会用到的方式。我们通常将来自第三方的对象通过 xml 的方式进行加载。而自定义的对象则通过注解的方式就行加载。
  2. 为了能添加了注解的定义的类进行加载,需要在 Spring 配置文件中开启包扫描。
  3. AOP 和声明式事务的相关内容通常也会被添加在 Spring 配置文件中。

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd
"><!--开启注解扫描,base-package指定扫描的包路径--><context:component-scan base-package="com.idol"/><!--引入外部资源文件--><context:property-placeholder location="classpath:jdbc.properties"/><!--第三方jar中的bean定义在xml中--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean></beans>

四、纯注解方式配置 Spring

随着 Spring Boot 的流行,纯注解的开发方式也变的更加流行。具体的注解用法就不做赘述,说一下需要注意的点:

  1. 如果同一个接口下存在多个实现类,则必须在实现类的注解中为该类设置别名。且在通过 @Autowired 注入该对象时,配合 @Qualifier("employeeDao1") 注解使用。
  2. 通过 @Bean 注解加载进 Spring 容器中的对象,如果想通过对象类名首字母小写的方式从 ApplicationContext 中获取对象,则必须在注解中为该类设置别名。
  3. 如果有多个 @Configuration 配置类,则可通过 @Import 注解汇集到一个配置对象中。

源码

源码下载

------------------------- 靡不有初 鲜克有终 -------------------------

Spring-IoC 复习笔记相关推荐

  1. Spring IOC系列学习笔记五:context:component-scan 节点解析

    原文地址程序员囧辉大佬 相关文章 Spring IOC系列学习笔记一:前置刷新 Spring IOC系列学习笔记二:obtainFreshBeanFactory方法 Spring IOC系列学习笔记三 ...

  2. 【Spring】Spring IOC学习笔记

    Spring IOC Spring简介 Spring理念 使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架 Spring优点 Spring是一个轻量级的 控制反转(IOC) 和 面向切 ...

  3. Spring MVC 复习笔记01

    1. springmvc框架 1.1 什么是springmvc spring mvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合.spring mvc是一个 ...

  4. Spring复习笔记:4

    在复习笔记三中我们进行的案例的编写,我们可以发现,就算使用了注解的方式,xml配置文件文件还是不能够删除,现在我们来将一些新的注解可以让我们去掉xml配置文件. @Configuration 作用:指 ...

  5. springaop事务逻辑原理_太狠了!阿里大牛手写的Spring核心面试笔记:IOC+AOP+MVC+事务...

    Spring作为现在最流行的java 开发技术,其内部源码设计非常优秀.如果你不会Spring,那么很可能面试官会让你回家等通知. Spring是什么? 有一个工地,几百号人在用铁锹铲子挖坑. 如果开 ...

  6. Spring IOC(控制反转)思想笔记

    Spring IOC(控制反转)思想笔记 IOC控制反转基本理念就是将程序控制权从程序员手中交给用户自定义,从而避免了因为用户一个小需求的变化使得程序员需要改动大量代码. 在这里插入图片描述 案例 如 ...

  7. Spring IOC(控制反转)思想笔记

    Spring IOC(控制反转)思想笔记 IOC控制反转基本理念就是将程序控制权从程序员手中交给用户自定义,从而避免了因为用户一个小需求的变化使得程序员需要改动大量代码. 案例 如果按照之前javaw ...

  8. JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(6):Spring IOC容器学习(概念、作用、Bean生命周期)...

    一.IOC控制反转概念 控制反转(IOC)是一种通过描述(在Java中可以是XML或者是注解)并通过第三方去生产或获取特定对象的方式. 主动创建模式,责任在于开发者,而在被动模式下,责任归于Ioc容器 ...

  9. Spring IOC AOP详细笔记

    spring 文章目录 spring 什么是spring spring框架作用: ioc aop spring基本配置 IOC掌握什么? IOC创建对象方式 Spring配置 别名配置 bean配置 ...

  10. Spring IOC源码解析笔记

    小伙伴们,你们好,我是老寇 Spring最重要的概念就算IOC和AOP,本篇主要记录Spring IOC容器的相关知识,本文适合有spring相关基础并且想了解spring ioc的相关原理的人看 本 ...

最新文章

  1. Uncaught ReferenceError: angular is not defined
  2. hub设备_USB不够用,一个HUB全部搞定!ORICO 群控USB扩展器
  3. 杂项-Java:JSP
  4. freemarker 概述
  5. 开发人员学Linux(2):VirtualBox中安装CentOS7系统设置
  6. SAP Fiori Launchpad launchpad Designer组件和configuration组件的重要存储表一览
  7. 下一代CC++测试框架TestNG++入门指导【转】
  8. 用vim + xdebug 来追踪thinkphp的执行过程
  9. java 25 - 2 网络编程之 网络通信三要素
  10. 在淘宝规则不断变化的形式下,该如何让店铺更好地发展
  11. STM32-GPIO的配置和使用
  12. 2021年氯化工艺考试题库及氯化工艺考试试卷
  13. python数据分析之pandas
  14. 用LaTex写伪代码(使用algorithm2e包)
  15. 10 个Web3 设计灵感网站
  16. 【算法】二分法多种情况详解
  17. 如何提取论文中的表格数据(pdf转换excel)
  18. 计算机应用期刊主编终审通过率,审稿快的期刊_最容易发表审稿快的学报_审稿快的三本或大专学报...
  19. Linux操作系统下C语言网络编程(全文23475字,包含了Linux系统下所有网络编程的知识点,附程序代码)
  20. python编程入门pdf-Python编程:从入门到实践 PDF 下载

热门文章

  1. LR-Web服务器和应用程序服务器区别(性能指标)
  2. C语言:房贷计算器(等额本息与等额本金对比计算器)
  3. php如何开启COM组件
  4. UDID 和 UUID 的问题
  5. 单耳蓝牙耳机怎么连接_蓝牙耳机怎么连接
  6. matlab pie 空隙,编码解决饼图(Pie)的标签重叠问题
  7. 数组根据某个条件筛选出符合的数据,生成一个新的数组
  8. 显示器3d测试软件,IPS显示屏/裸眼3D显示原理及3D应用
  9. html点击热力图还原,网站页面点击热力图的SEO工具说明
  10. 神州数码:我国市民卡发展之路探讨