Spring容器

Spring容器能够帮助你管理所有的Bean对象。专业术语称之为IoC控制反转。在传统的程序中。对象的生成都是由开发人员完毕的。而在控制反转中,对象的生成所有都交给框架完毕。这种优点就是降低了程序的依赖性。

Bean在Spring中的生命周期例如以下:

  • 实例化。

    Spring通过newkeyword将一个Bean进行实例化,JavaBean都有默认的构造函数,因此不须要提供构造參数。

  • 填入属性。Spring依据xml文件里的配置通过调用Bean中的setXXX方法填入相应的属性。
  • 事件通知。Spring依次检查Bean是否实现了BeanNameAware、BeanFactoryAware、ApplicationContextAware、BeanPostProcessor、InitializingBean接口,假设有的话,依次调用这些接口。

  • 使用。应用程序能够正常使用这个Bean了。
  • 销毁。假设Bean实现了DisposableBean接口。就调用其destroy方法。

定义一个Bean的语法例如以下。

<beans xmlns="...">
<bean id="apple" class="com.whitejava.Apple"/>
</beans>

使用这个Bean时仅仅要通过applicationContext.getBean("apple")就可以获取。

作用域。

在Spring中还能够指定Bean的作用域,也就是Bean的寿命。仅仅要设置bean标签的scope属性就可以。Spring提供的生命周期有:singleton整个应用仅仅有一个、prototype每次调用都产生一个新的、request每一个HTTP请求相应一个bean、session每一个HTTP会话相应一个bean、global-session每一个portlet上下文session相应一个bean。

默认生命周期是singleton。

初始化和销毁。第一种方法,在xml中的bean标签添加init-method和destroy-method属性来指定初始化和销毁方法。

另外一种方法,在bean的java类中implements InitializingBean或者DisposableBean接口实现初始化和销毁。第三种方法。在xml中的beans标签中添加default-init-method和default-destroy-method属性。

另外,能够通过RPC或者JMS配置远程Bean。

后面的章节有介绍。

外部配置

有时候有些关键的属性,比方数据库password,须要放在xml文件之外,便于兴许改动。

Spring解决问题的方法有两种。一种是属性占位符,一种是属性重写。另外阿里提供的AutoConfig有更好的配置管理机制。将在后面具体介绍。

关于占位符。首先加载属性文件:

<context:property-placeholder location="classpath:/db.properties"/>
或者
<context:property-placeholder location="file:///etc/db.properties"/>

引用属性中的变量:

<bean id="dataSource" class="org.springframework.jdbc.datbase.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}/>
</bean>

覆盖properties文件里的变量:

<util:properties id="defConf>
<prop key="jdbc.url">jdbc:mysql://localhost/test</prop>
<prop key="jdbc.driverClassName">com.mysql.jdbc.Driver</prop>
</util:properties> <context:property-placeholder location="classpath:/db.properties" properties-ref="defConf" system-properties-mode="OVERRIDE"/>
除了OVERRIDE还有FALLBACK、NEVER。

覆盖xml配置。

加载properties文件并覆盖现有的xml配置。

请看以下的样例:

<bean id="dataSource" class="xxx">
<property name="url">jdbc:oracle://xxx</property>
<property name="username">xxx</property>
</bean> <context:property-overrider location="classpath:/db.properties"/>

db.properties文件的内容:

dataSource.url=jdbc:mysql://xxx
dataSource.username=yyy

加密配置值。加载经过加密的properties文件:

<bean id="environmentConfig" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
<property name="algorithm" value="PBEWithMD5AndDES"/>
<property name="passwordEnvName" value="DB_ENCRYPTION_PWD"/>
</bean> <bean id="stringEncrypter" class="org.jasypt.encryption.pbe.Environment">
<property name="config-ref" ref="environmentConfig"/>
</bean> <bean id="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
<constructor-arg ref="stringEncrypter"/>
</bean>

Session

Spring中的Session一般不须要直接操作,而是将数据保存到Bean容器中的scope=session中。

Spring框架:Spring容器具体解释的更多相关文章

  1. 跟着刚哥学习Spring框架--Spring容器(二)

    Spring容器 启动Spring容器(实例化容器) -- IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化(加载启动),这样才可以从容器中获取Bean的实例并使用.  Bean是S ...

  2. Spring框架IOC容器和AOP解析 非常 有用

    Spring框架IOC容器和AOP解析   主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面 ...

  3. Spring框架 - Spring和Spring框架组成

    Spring框架 - Spring和Spring框架组成 Spring是什么?它是怎么诞生的?有哪些主要的组件和核心功能呢? 本文通过这几个问题帮助你构筑Spring和Spring Framework ...

  4. [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

    前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...

  5. Spring框架IOC容器和AOP解析

    主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置  一.S ...

  6. spring框架--IOC容器,依赖注入

    思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action  多个   [维护成员变量] service 一个   [不需要维护公共变量] dao     一个   [不需要维护 ...

  7. Spring 框架学习 —— 容器

    容器是 Spring 框架的核心.Spring 容器使用 DI(依赖注入)机制管理构成应用的组件(类),所谓 DI,也即是其能够创建相互协作的组件(类)之间的关联(依赖). 1. 应用上下文(Appl ...

  8. [Spring框架]Spring开发实例: XML+注解.

    前言: 本文为自己学习Spring记录所用, 文章内容包括Spring的概述已经简单开发, 主要涉及IOC相关知识, 希望能够对新入门Spring的同学有帮助, 也希望大家一起讨论相关的知识. 一. ...

  9. [Spring框架]Spring IOC的原理及详解。

    这里感谢 CSDN 的原博客:http://blog.csdn.net/m13666368773/article/details/7802126 看后  受益匪浅,这里再重温一遍Spring IOC ...

  10. JavaWeb_(Spring框架)Spring中IoC与DI概念入门

    Spring是于2003 年兴起的一个轻量级的Java 开源框架,它由Rod Johnson创建.传统J2EE应用的开发效率低,Spring作为开源的中间件,提供J2EE应用的各层的解决方案,Spri ...

随机推荐

  1. POJ 1035 Spell checker 简单字符串匹配

    在输入的单词中删除或替换或插入一个字符,看是否在字典中.直接暴力,172ms.. #include <stdio.h> #include <string.h> ]; ][], ...

  2. MINA源码分析

    IoService通过构造函数的形式成为了IoSession一部分,IoSession是通过IoAcceptor以及connector创建出来,这二者其实就是IoService,所以对于IoSessi ...

  3. 二师兄VPN加速器

    http://www.2-vpn2.org/home.action?ic=B003CC4C47

  4. C语言可变参数在宏定义中的应用

    在C语言的标准库中,printf.scanf.sscanf.sprintf.sscanf这些标准库的输入输出函数,参数都是可变的.在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用 ...

  5. C技巧:结构体参数转成不定参数

    下面这段程序是一个C语言的小技巧,其展示了如何把一个参数为结构体的函数转成一个可变参数的函数,其中用到了宏和内建宏"__VA_ARGS__",下面这段程序可以在GCC下正常编译通过 ...

  6. bzoj 2251: [2010Beijing Wc]外星联络 后缀数组

    2251: [2010Beijing Wc]外星联络 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 424  Solved: 232[Submit][ ...

  7. [收藏转贴]构建RESTful风格的WCF服务

    RESTful Wcf是一种基于Http协议的服务架构风格. 相较 WCF.WebService 使用 SOAP.WSDL.WS-* 而言,几乎所有的语言和网络平台都支持 HTTP 请求. RESTf ...

  8. ScrollView中嵌套两个ListView

    做的项目中要使用两个ListView在同一个页面上下显示,因为数据源不同,不能通过在Adapter中设置标志位去区分显示,最后只能硬着头皮做一个ScrollView嵌套两个ListView,但按正常情 ...

  9. Linux平台下Java调用C函数

    JNI是Java native interface的简写,可以译作Java原生接口.Java可以通过JNI调用C/C++的库,这对于那些对性能要求比较高的Java程序无疑是一个 福音. 使用JNI也是 ...

  10. [Mac]使用xcode命令行编译protobuf

    因为不想每次测试与画面显示无关的小功能时把cocos2dx包含进去,所以改用xcode的command line tool直接建立c++项目. 方法: 1.点击file-new-project,选择o ...