这一部分,主要介绍spring IOC,即spring容器
[][]
第一节.what is Spring IOC?
1.Inversion of Control(IOC)
2.Also calls Dependency Injection(DI)
3.Object art given their dependencies at creation time by some external entity that coordinates each object in the system
4.The key benefit of DI is loose coupling
IOC是整个spring框架的核心,即控制反转,也叫做依赖注入。指的是对象之间的依赖关系,由spring容器在运行时候依据spring的配置文件动态建立。
How to use Spring IOC?
public class Logic{
Dao dao;//dependency
public Logic(){
dao = DaoFactory.getDao();
}
}
传统上,如果一个类中调用了DaoImpl的方法,需要在这个类中直接创建DaoImpl的对象,或者编写工厂类,有工厂类创建对象。这样的方式都是在编译时就确定了类和DaoImpl的关系,增加了代码的耦合度。
在spring中,我们将对象的创建等相关工作交给spring容器来实现。像web container管理servlet一样,spring容器负责管理JavaBean的生命周期。
IOC的方式
注入依赖(DI)主要有三种注入方式,即构造器注入、Setter注入和使用注解方式。由于大量的构造器参数可能使程序变得笨拙,特别是党某些属性是可选的时候,因此通常情况下,spring开发团队提倡使用setter注入方式。
我在下面分别介绍这三种方式
1.构造器注入方式
先看一个java类
public class StudentService implements IStudentService {
private IStudentDao studentDao;
private String id;
public StudentService(IStudentDao studentDao,String id){
this.studentDao = studentDao;
this.id = id;
}
public void saveStudent() {
studentDao.saveStudent();
System.out.print(",ID为:"+id);
}
}
在来看一下spring的配置文件
<bean id="studentDao" class="com.wch.dao.impl.StudentDao"></bean>
<bean id="studentService" class="com.wch.service.impl.StudentService">
<constructor-arg index="0" type="com.wch.dao.IStudentDao" ref="studentDao" />
<constructor-arg index="1" value="123456" type="java.lang.String"></constructor-arg>
</bean>
基于构造器的DI通过调用带参数的构造器来实现,每个参数代表着一个依赖。在类StudentService 中,有俩个参数,一个是studentDao,一个是id(string类型)用'type'属性来显式指定那些构造参数的类型
index属性来显式指定构造参数的索引,从0开始
setter注入
Spring注入依赖的Setter的方式注入依赖是经常使用的到得一种方法,也非常的简单,只需给每个需要注入的属性设置Setter方法
构造器注入与Setter注入的比较
由于大量的构造器参数可能使程序变得笨拙,特别是当某些属性是可选的时候。因此通常情况下,Spring开发团队提倡使用setter注入。而且setter DI在以后的某个时候还可将实例重新配置(或重新注入)
尽管如此,构造器注入还是得到很多纯化论者(也有很好的理由)的青睐。一次性将所有依赖注入的做法意味着,在未完全初始化的状态下,此对象不会返回给客户代码(或被调用),此外对象也不需要再次被重新配置(或重新注入)。
对于注入类型的选择并没硬性的规定。只要能适合你的应用,无论使用何种类型的DI都可以。对于那些没有源代码的第三方类,或者没有提供setter方法的遗留代码,我们则别无选择--构造器注入将是你唯一的选择
同样是上面的提到的StudentService类,我们来看看setter方式的spring配置文件书写方式
<bean id="studentDao" class="com.wch.dao.impl.StudentDao"></bean>
<bean id="studentService2" class="com.wch.service.impl.StudentService2">
<!--
指定需要注入bean
-->
<property name="studentDao" ref="studentDao"></property>
<!--
直接变量(基本类型、Strings类型等。),可以通过value属性经行赋值
-->
<property name="id" value="123456789"></property>
</bean>
感谢nellybaby
http://huangliangbao.iteye.com/的blog,省去了我很多的时间。再此歇息
第二节 基本装配
通过依赖注入注入的信息一般分为3钟情况:
1.简单值,例如int、spring等
2.其他bean类型的对象
3.集合类型
下面来看一个spring的配置文件
<!-- ref方式注入属性 -->
<bean id="personDao" class="com.persia.PersonDaoBean"></bean>
<bean id="personService4" class="com.persia.PersonServiceBean">
<property name="personDao" ref="personDao"></property>
<property name="name" value="persia"></property>
<property name="age" value="21"></property>
</bean>
对于简单的值,在<property>标记中使用value即可;如果注入的是其他的bean,需要在property中使用ref
下面来看一个集合类型的spring配置文件
<property name="sets">
<!-- 集合的注入 -->
<set>
<value>第一个</value>
<value>第二个</value>
<value>第三个</value>
</set>
</property>
<property name="lists">
<!-- 集合的注入 -->
<list>
<value>第一个l</value>
<value>第一个l</value>
<value>第三个l</value>
</list>
</property>
<property name="map">
<map>
<entry key="key1" value="value-1"></entry>
<entry key="key2" value="value-2"></entry>
<entry key="key3" value="value-3"></entry>
</map>
</property>
如果需要注入的属性类型为list,需要使用<list>标记,允许有重复的元素,而属性类型为set时候,需要使用标记<set>。map类型需要使用标记<map>,它为键值对应
再来看一个
<property name="properties">
<props>
<prop key="key1">value1</prop>
<prop key="key2">value2</prop>
<prop key="key3">value3</prop>
</props>
</property>
<property name="properties">
<props>
<value>
key1=value1
key2=value2
key3=value3
</value>
</props>
</property>
Properities类型的配置有以上俩种方式
分享到:
相关推荐
- `spring-core-5.2.6.RELEASE.jar`:Spring的核心工具集,包括IoC和基本的AOP支持。 - `spring-expression-5.2.6.RELEASE.jar`:Spring表达式语言(SpEL),用于在运行时查询和操作对象图。 - `spring-jdbc-5.2.6....
Spring Framework 是一个开源的Java平台,它为构建企业级应用提供了全面的编程和配置模型。这个框架的核心特性是依赖注入(Dependency Injection,DI),用于管理对象的生命周期和配置。Spring 框架的设计目的是使...
本章主要介绍Spring框架中的控制反转(Inversion of Control,IoC)思想,以及依赖注入(Dependency Injection,DI)与依赖查找(Dependency Lookup,DL)两种实现IoC的方式。此外,还涉及了Spring程序开发的基本...
2. **面向切面编程(Aspect-Oriented Programming,AOP)**:Spring的AOP模块提供了声明式事务管理、日志记录、性能监控等功能,允许开发者将关注点从业务逻辑中分离出来,实现代码的解耦。 3. **数据访问集成**:...
2. **IoC(控制反转)容器**:IoC 容器是 Spring 的核心,它负责管理对象的生命周期和依赖关系。开发者可以使用XML配置或注解来声明对象及其依赖关系,实现组件的装配。 3. **Spring MVC**:作为Web应用的主干,...
2. `spring-beans.jar`:管理bean的定义和生命周期,是IoC的核心。 3. `spring-context.jar`:构建于`spring-core`和`spring-beans`之上,提供应用程序上下文,支持AOP(Aspect-Oriented Programming)和事件传播。 ...
Spring框架是Java开发中不可或缺的一部分,它为开发者提供了丰富的功能,包括依赖注入、面向切面编程、MVC、数据访问等。本压缩包中的文件是Spring框架4.3.16版本的各个核心模块,这个版本是在JDK1.8环境下支持的。...
在本系列的第一篇【框架源码篇 01】中,我们将深入探讨Spring框架的核心组件——控制反转(Inversion of Control,简称IOC)。IOC是一种设计模式,它将对象的创建和管理职责从应用代码中解耦出来,转交给一个外部...
重构第二步——工厂(Factory)模式 9 重构第三步——工厂(Factory)模式的改进 10 重构第四步-IoC容器 11 控制反转(IoC)/依赖注入(DI) 11 什么是控制反转/依赖注入? 11 依赖注入的三种实现形式 12 ...
此官方完整包包含两部分:spring-framework-4.0.3.RELEASE-dist.zip和spring-framework-4.0.3.RELEASE-docs.zip。前者是Spring框架的核心库,后者则是详细的官方文档,为深入理解和使用Spring框架提供了全面的指导。...
Spring框架是Java开发中不可或缺的一部分,它以其模块化、易扩展和强大的依赖注入特性而闻名。Spring 5.0.6版本是该框架的一个稳定版本,提供了许多改进和新功能。这个版本的jar包是Spring核心组件的基础,适用于...
Spring Framework是Spring生态的基础,它提供了一个全面的应用程序开发模型,包括IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)等核心特性。版本3.2.4是该框架的一个...
2. **AOP(Aspect-Oriented Programming, 面向切面编程)** Spring的AOP支持允许开发者定义横切关注点,如日志、事务管理等,这些关注点可以跨多个业务逻辑进行统一处理。在3.2M1中,AOP可能有新的注解或增强的切面...
Spring IOC,全称为Inversion of Control,即控制反转,是Spring框架的核心特性,它负责管理对象的生命周期和依赖关系。在此问题中,我们探讨了几个关键知识点: 1. **IOC 容器与bean的作用域**: - Spring的IOC...
首先,Spring的核心模块包括IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)。IoC容器是Spring的基石,负责管理对象的生命周期和依赖关系。通过配置文件或注解,开发者...
AOP与IoC相结合,使得Spring能够更好地管理和控制应用的各个部分。 ### 6. Spring容器 Spring提供了两种容器:DefaultListableBeanFactory和ApplicationContext。ApplicationContext除了具备Bean的管理功能外,还...
它以其强大的依赖注入(IOC)和面向切面编程(AOP)特性,为开发者带来了极大的便利。本教程将通过一系列的案例,从基础到深入,逐步剖析Spring框架的核心机制,帮助你理解和掌握Spring的源码,从而更好地运用到实际...
- `spring-core.jar`: 包含了Spring的基本组件,如Bean工厂、资源处理、依赖注入(DI)和控制反转(IOC)等核心功能。 - `spring-beans.jar`: 提供了Bean工厂和XML配置解析的支持,是实现DI和IOC的基础。 - `...
Spring框架是Java开发中最受欢迎和广泛使用的开源框架之一,它为构建企业级应用程序提供了一个全面的编程和配置模型。3.0.5.RELEASE是Spring框架的一个重要版本,发布于2011年,它是对3.0.x系列的维护更新,包含了...
在本篇文档的第二部分,我们将深入探讨Spring的核心技术,包括控制反转(IoC)容器、事件处理、资源管理、国际化(i18n)、验证、数据绑定、类型转换、Spring表达式语言(SpEL)以及面向切面编程(AOP)。...