开源框架Spring详解---IoC的深刻理解 作者:z_xiaofei168 有一段时间没有接触spring了,感觉有点陌生了,今天总结了一下关于IoC的一些知识点,虽然是学过spring了,但是如果不经常使用,知识点是连接不起来的。所以今天我特意做了这个总结。相信对大家有一定的帮助。以便我们可以共同学习,共同进步。 Ioc的理解 1、依赖注入的概念 spring的两个核心概念:一个是控制反转IoC,也可以叫做依赖注入DI。还有一个是面向切面编程AOP。 控制反转:当某个java对象需要(依赖)另一个java对象时,不是自身直接创建依赖对象,而是由实现IoC的容器(如spring框架的IoC容器)来创建,并将它注入需要这个依赖对象的java对象中。 2、spring的依赖注入 2.1、构造器注入 <bean id="accoutDaoImpl" class="cn.csdn.dao.AccoutDaoImpl" scope=”singleton”/> <bean id="accoutServicImpl" class="cn.csdn.service.AccoutServicImpl" scope=”"> <!-- 构造器注入方式 --> <constructor-arg ref="accoutDaoImpl"/> </bean> 2.2、设值(set方法)注入 <bean id="accountDaoImpl" class="cn.csdn.dao.AccoutDaoImpl"/> <bean id="accoutServicImpl" class="cn.csdn.service.AccoutServicImpl"> <!-- 设值(set方法)注入 --> <property name="accountDaoImpl" ref="accoutDaoImpl"/> </bean> 3、spring的容器 spring管理的基本单元是Bean,在spring的应用中,所以的组件都是一个个的Bean,它可以是任何的java对象。spring负责创建这些Bean的实例。并管理生命周期。而spring框架是通过其内置的容器来完成Bean的管理的,Bean在spring的容器中生存着,使用时只需要通过它提供的一些方法从其中获取即可 。 spring的容器有两个接口:BeanFactory 和 ApplicationContext 这两个接口的实例被陈为spring的上下文。 ApplicationContext ac = new ClassFathXmlApplicationContext("app*.xml"); AccountService accountService = (AccountService)ac.getBean("accountServiceImpl"); 4、使用xml装配Bean 4.1、装配Bean id:指定该Bean的唯一标识。 class:指定该Bean的全限定名。 name:为该Bean指定一到多个别名。多个别名可以用“,”和“;”分割。 autowire:指定该Bean的属性的装配方式。 scope:指定该Bean的存在。 init-method:指定该Bean的初始化方法。 destroy-method:指定该Bean的销毁方法。 abstract:指定该Bean是否为抽象的。如果是抽象的,则spring不为它创建实例。 parent:指定该Bean的父类标志或别名。 4.2、装配Bean的各种类型属性值 1>.简单类型属性值的装配 <bean id="bean1" class="cn.csdn.domain.Bean1"> <property name="name" value="z_xiaofei168"/> <property name="age"> <value>22</value> </property> </bean> 2>.引用其他Bean的装配 <bean id="bean1" class="cn.csdn.domain.Bean1"> ... </bean> <bean id="bean2" class="cn.csdn.domain.Bean2"> <!-- 引用自其他Bean的装配 --> <property name="bean1" ref="bean1"/> </bean> 另外一种不常使用的配置方式是在property元素中嵌入一个bean元素来指定所引用的Bean. <bean id="bean1" class="cn.csdn.domain.Bean1"> ... </bean> <bean id="bean2" class="cn.csdn.domain.Bean2"> <!-- 引用自其他Bean的装配 --> <property name="bean1"> <bean id="bean1" class="cn.csdn.domain.Bean1"/> </property> </bean> 4.3、自动装配 no:不使用自动装配。必须通过ref元素指定依赖,这是默认设置。由于显式指 定协作者可以使配置更灵活、更清晰,因此对于较大的部署配置,推荐采用该设置。而且在某种程度上,它也是系统架构的一种文档形式。 <bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton"> <property name="studentDaoImpl" ref="studentDaoImpl"> </property> </bean> 备注:有property属性 指定ref byName:根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。例如,在bean定义中将autowire设置为by name,而该bean包含master属性(同时提供setMaster(..)方法),Spring就会查找名为master的bean定义,并用它来装配给master属性。 <bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton" autowire="byName"/> 备注:没有property属性 byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check="objects"让Spring抛出异常。 备注:spring3.0以上不抛异常。 <bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton" autowire="byType"/> 备注:没有property属性 Constructor:与byType的方式类似,不同之处在于它应用于构造器参数。如果 在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。 <bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton" autowire="constructor"/> 备注:没有property属性 autodetect:通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。 <bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton" autowire="autodetect"/> 4.4、指定Bean的存在范围 singleton:在每个Spring IoC容器中一个bean定义对应一个对象实例。这是默认值 prototype:每次对Bean请求时都会创建一个Bean定义对应一个实例。一个Bean定义多个实例。 request:在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。 session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。 global_session:在一个全局的HTTP Session中,一个bean定义对应一个实例。 典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效。 4.5、指定Bean的初始化和销毁 Spring可以管理Bean实例在实例化结束之后和被销毁之前的行为。通过property的init-method属性可以指定某个方法应该在Bean全部依赖关系设置结束后自动执行;通过property的destroy-method属性可以指定某个方法应该在Bean被销毁之前自动执行。 public class Bean{ public String name; public Bean(){ system.out.println(“调用默认构造方法”); } public void setName(){ system.out.println(“执行setName()方法”); this.name=name; } public String getName(){ return name; } public void init(){ system.out.println(“执行初始化方法”); } public void destroy(){ system.out.println(“执行销毁方法”); } } 配置文件 <bean id=”bean1” class=”cn.csdn.service.Bean1” scope=”singleton” init-method=”init” destroy-method=”destroy”> <property name=”name” value=”z_xiaofei168/>” </bean> 执行结果: 调用默认构造方法 执行setName()方法 执行初始化方法 4.6、装配Bean的继承 如果两个Bean的属性装配信息很相似,那么可以利用继承来减少重复的配置工作。 <!-- 装配Bean的继承 父类作为模板,不需要实例化,设置abstract=”true”--> ` <bean id=”parent” class=”cn.csdn.service.Parent” abstract=”true”> <property name=”name” value=”z_xiaofei168”/> <property name=”pass” value=”z_xiaofei168”/> </bean> <!-- 装配Bean的继承 子类中用parent属性指定父类标识或别名 子类可以覆盖父类的属性装配,也可以新增自己的属性装配--> ` <bean id=”child” class=”cn.csdn.service.Chlid” parent=”parent”> <property name=”pass” value=”123123”/> <property name=”age” value=”22”/> </bean>
相关推荐
Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- ...
Java-Spring-SpringIoC容器-SpringIoC的学习 SpringIoC容器的学习笔记 主要介绍了IoC容器工作原理以及如何配置IoC容器 通过标签和注解配置容器
spring4--1.入门及ioc
Spring.net二----初探IOC容器.rar
本篇文章主要介绍了详解Spring框架---IOC装配Bean,提供了三种方式实例化Bean,具有一定的参考价值,有兴趣的可以了解一下。
spring-demo10-注解-IOC.zip
拓薪教育-Spring3.2-介绍IOC上【】03.拓薪教育-spring3.2-介绍IOC下【】04.拓薪教育-spring3.2-AOP和其他功能介绍【】05.拓薪教育-spring3.2-环境搭建【】06.拓薪教育-s 资源太大,传百度网盘了,链接在附件中,有...
Spring框架-IoC实现CRUD
spring IoC, 使用配置文件方式配置Bean的实例化和依赖注入
pring源代码各个模块作用 核心模块: 1 spring-core:核心模块 依赖注入IOC和DI的最基本实现 spring-beans:Bean工厂与装配 spring-context:上下文,即IOC...spring-aspects:集成AspectJ,Aop应用框架 spring-instrume
本系统实现了spring的控制反转思想(IOC)
springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC...
NULL 博文链接:https://vincent-yy.iteye.com/blog/439945
Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程.doc
Spring-IoC容器
Spring2.5和Hibernate3集成 采用声明式事务 1.声明式事务的配置 * 配置sessionFactory * 配置事务管理器 * 配置事务的传播特性 * 配置哪些类哪些方法使用事务 2.编写业务逻辑方法 * 继承...
proxy,jdkproxy-transaction,jdkproxy-salary,day02-itheima11-spring-08-cglibproxy,day02-itheima11-spring-09-aop.xml,day02-itheima11-spring-10-aop.xml.advice,day02-itheima11-spring-11-aop.xml.exception等...
springmvc-springioc-lib.rar springmvc-springioc-lib.rar
可选:用测试覆盖服务如何使项目运行从GitHub克隆存储库: git clone git@github.com:ifqthenp/otus-spring-hw-01-ioc-xml.git 使用以下命令进入文件夹: cd otus-spring-hw-01-ioc-xml 使gradlew脚本可执行(如果...
spring技术--IOC控制反转课件.ppt