上一篇学习了IOC的概念并初步分析了实现原理,这篇主要学习Spring的配置,话不多说,让我们开始!

一、Bean元素配置

1.1 基本配置

看一个最基本的bean配置

<bean name="hello" class="com.yuanqinnan.test.HelloWorld"></bean>

上面的配置中,我们将bean交给spring管理,看其中属性字段:

  • class:被管理对象的完整类名

  • name:被管理对象的名称,可以通过名称获取改对象(可以重复,可以使用特殊字符)

  • id:与name作用相同(不可以重复,不可以使用特殊字符)

1.2 bean的进阶配置

scope属性

  • singleton:定义bean的范围为每个Spring容器一个实例(默认值)

  • prototype:定义bean可以被多次实例化(使用一次就创建一次)

  • request:定义bean的范围是HTTP请求,只有再使用有web能力的spring上下文时有效。

  • request:定义bean的范围是HTTP请求,只有再使用有web能力的spring上下文时有效。

  • global-session:定义bean的范围是全局HTTP会话,只有再portlet上下文中有效。

生命周期属性

  • init-method:配置一个方法作为生命周期初始化方法.spring会在对象创建之后立即调用.

  • destory-method:配置一个方法作为生命周期的销毁方法.spring容器在关闭并销毁所有容器中的对象之前调用.

    代码如下

<bean id="hello"  init-method="getInfo" destroy-method="destory" class="com.yuanqinnan.test.HelloWorld">
</bean>

注意,只有singleton的bean,destory-method才有效

1.3实例化bean的方式

  1. 使用类构造器实例化(默认无参数)

<bean id="hello" class="com.yuanqinnan.test.HelloWorld">
</bean>
  1. 使用静态工厂方法实例化(简单工厂模式)

public class HellowWorldFactory {
public static HelloWorld createHellowWorld(){
return new HelloWorld();
}
}
 <bean name="hello2"
class="com.yuanqinnan.test.HellowWorldFactory"
factory-method="createHellowWorld">
</bean>
  1. 使用实例工厂方法实例化(工厂方法模式)

public class HellowWorldFactory2 {
public HelloWorld createHellowWorld(){
return new HelloWorld();
}
}
 <bean id="HellowWorldFactory2" class="com.yuanqinnan.test.HellowWorldFactory2"/>
<bean id="hello3" factory-bean="HellowWorldFactory2" factory-method="createHellowWorld" />

1.4 spring的分模块配置

spring 允许多个文件进行配置,可以按照模块来进行配置

 <import resource="applicationContext2.xml"></import>

二、spring 属性注入

2.1 set方法注入

<bean>元素的<property>子元素指明了使用它们的set方法来注入,可以使用property的value属性来注入简单类型

 <bean name="user" class="com.yuanqinnan.test.User">
<!--值类型注入-->
<property name="age" value="18"></property>
<property name="name" value="tom"></property>
<!-- 引用类型注入-->
<property name="car" ref="car"></property>
</bean>
<bean name="car" class="com.yuanqinnan.test.Car">
<property name="color" value="blue"></property>
</bean>

User类与Car类代码就不贴了,应该是可以看得懂。

2.2 构造函数注入

使用constructor-arg来完成构造方法的注入,注入的方式和setter方式注入相同。 可以通过type属性,控制注入的类型 可以通过index属性,控制注入的顺序 可以通过name属性,控制注入的名字

 <bean name="user2" class="com.yuanqinnan.test.User">
<constructor-arg name="name" index="0" type="java.lang.String" value="lucy"></constructor-arg>
<constructor-arg name="age" index="1" type="java.lang.Integer" value="20"></constructor-arg>
<constructor-arg name="car" ref="car"></constructor-arg>
</bean>

2.3 spel注入

<bean name="user3" class="com.yuanqinnan.test.User">
<property name="name" value="#{user.name}"></property>
<property name="age" value="#{user2.age}"></property>
<!-- 引用类型注入 为car属性注入下方配置的car对象-->
<property name="car" ref="car"></property>
</bean>

三、复杂类型注入

3.1 数组

<property name="arr">
<array>
<value>tom</value>
<value>lucy</value>
<ref bean="user2"></ref>
</array>
</property>

3.2 List

<property name="list">
<list>
<value>tom</value>
<value>lucy</value>
<ref bean="user2"></ref>
</list>
</property>

3.3 Set

<property name="set">
<set>
<value>com.jbdc.mysql.Driver</value>
<value>root</value>
<ref bean="user"/>
</set>
</property>

3.4 Map

<property name="map">
<map>
<entry key="url" value=""></entry>
<entry key="user" value-ref="user"></entry>
<entry key-ref="user3" value-ref="user2"></entry>
</map>
</property>

3.5 Properties

<property name="prop">
<props>
<prop key="url">com.jbdc.mysql.Driver</prop>
<prop key="userName">root</prop>
<prop key="password">1234</prop>
</props>
</property>

总结:以上是spring的配置详解,都是通过XML装配,下一篇我们学习注解配置

Spring之旅第三篇-Spring配置详解的更多相关文章

  1. Spring之旅第四篇-注解配置详解

    一.引言 最近因为找工作,导致很长时间没有更新,找工作的时候你会明白浪费的时间后面都是要还的,现在的每一点努力,将来也会给你回报的,但行好事,莫问前程!努力总不会有错的. 上一篇Spring的配置博客 ...

  2. Spring MVC配置文件的三个常用配置详解

    转自:http://www.cnblogs.com/benwu/articles/5162614.html Spring MVC项目中通常会有二个配置文件,sprng-servlet.xml和appl ...

  3. spring基于通用Dao的多数据源配置详解【ds1】

    spring基于通用Dao的多数据源配置详解 有时候在一个项目中会连接多个数据库,需要在spring中配置多个数据源,最近就遇到了这个问题,由于我的项目之前是基于通用Dao的,配置的时候问题不断,这种 ...

  4. 从Spring到SpringBoot构建WEB MVC核心配置详解

    目录 理解Spring WEB MVC架构的演变 认识Spring WEB MVC 传统时代的Spring WEB MVC 新时代Spring WEB MVC SpringBoot简化WEB MVC开 ...

  5. struts2系列(三):struts2配置详解

    原文链接:http://www.cnblogs.com/fmricky/archive/2010/05/20/1740479.html 1.<include> 利用include标签,可以 ...

  6. SpringBoot + Spring Security 基本使用及个性化登录配置详解

    Spring Security 基本介绍 这里就不对Spring Security进行过多的介绍了,具体的可以参考官方文档 我就只说下SpringSecurity核心功能: 认证(你是谁) 授权(你能 ...

  7. spring框架中AOP思想与各种配置详解

    Spring中提供两种AOP支持:   1.基于代理的经典AOP   2.Aspectj注解配置AOP    首先我们先了解什么是AOP,AOP(Aspect Oriented Programming ...

  8. Http请求中Content-Type讲解以及在Spring MVC注解中produce和consumes配置详解

    原文地址:  https://blog.csdn.net/shinebar/article/details/54408020 引言: 在Http请求中,我们每天都在使用Content-type来指定不 ...

  9. 第三章 Struts2配置详解

    3.1 Struts2执行过程    1.获取Struts2资源    2.在应用程序中导入Struts2的类库    3.在web.xml中配置StrutsPrepareAndExecuteFilt ...

随机推荐

  1. C++中的静态类型和动态类型的定义

    当我们使用存在继承关系的类型时,必须将一个变量或者其他表达式的静态类型与该表达式表示对象的动态类型区分开来. 表达式的静态类型在编译时总是已知的,它是变量声明时的类型或者表达式生成的类型: 而动态类型 ...

  2. 【bzoj 2326】【HNOI 2011】数学作业

    题解: 矩阵裸体. #include<cstdio> #include<cstring> #include<cmath> typedef long long ll; ...

  3. GIT的使用流程

    GIT的使用流程 1 github注册流程 1 进入github官网:https://github.com/ 2 注册一个自己的github账号 3 右上角选择New repository 4 进入c ...

  4. python 之 初识模块

    什么是模块 什么是模块 一个.py文件 就是一个模块 我们使用import加载的模块分为4个通用类别 1.py文件 2.包好一组模块的包(带__init__.py文件的文件夹) 3.内置模块 4.已被 ...

  5. netty源码学习

    概述 Netty is an asynchronous event-driven network application framework for rapid development of main ...

  6. 二维码神器QRCoder

    好久没有写Blog,都是因为不小心坠入了爱河,时间都给我家那位了,都没时间加班了(嗨呀,不小心撒了一下狗粮),不过,还是希望单身的赶紧找到心仪的另一半,实在找不到,那就加班啊(开个玩笑,别认真). 二 ...

  7. 只有一百行的xss扫描工具——DSXS源码分析

    目录 0x00 废话 0x01 扫描逻辑 第一个逻辑:dom型xss 第二个逻辑:经过后端的xss 0x02 总结 0x00 废话 DSXS是一个只有一百行代码的xss扫描器,其作者刚好就是写sqlm ...

  8. Mybatis之旅第五篇-动态SQL

    一.引言 在之前的CRUD例子中,都是一些很简单的SQL,然而实际的业务开发中会有一些复杂的SQL,我们经常需要拼接SQL,拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号.Myba ...

  9. WinForm加载外部类库项目的集成开发模式

    在项目开发中有一定的团队用到了Nuget.Coding:但是这用起来还是不太方方便,在Winform中呢,我们可以把一个人的项目当作一个类库项目,因为它生成的是一个dll文件,也就是单一文件,拥有了它 ...

  10. 带你学习AOP框架之Aspect.Core[1]

    在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的 ...