当前位置:首页 > 资讯 > info6 > 正文

Spring框架:Spring容器详解

发表于: 2014-09-18   作者:caipeichao2   来源:转载   浏览:
摘要: Spring容器Spring容器可以帮助你管理所有的Bean对象,专业术语称之为IoC控制反转。在传统的程序中,对象的生成都是由开发者完成的。而在控制反转中,对象的生成全部都交给框架完成。这样的好处就是减少了程序的依赖性。Bean在Spring中的生命周期如下:实例化。Spring通过new关键字将一个Bean进行实例化,JavaBean都有默认的构造函数,因此不需要提供构造参数。填入属性。Spr

Spring容器

Spring容器可以帮助你管理所有的Bean对象,专业术语称之为IoC控制反转。在传统的程序中,对象的生成都是由开发者完成的。而在控制反转中,对象的生成全部都交给框架完成。这样的好处就是减少了程序的依赖性。


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

  • 实例化。Spring通过new关键字将一个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。后面的章节有介绍。


外部配置

有时候有些关键的属性,比如数据库密码,需要放在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容器详解

编辑推荐
Spring 容器 在 Spring IOC 容器读取 Bean 配置创建 Bean 实例之前, 必须对它进行实例化. 只有在容
1. BeanFactory类结构体系: BeanFactory接口及其子类定义了Spring IoC容器体系结构,由于BeanFacto
Author: Naveen Balani (naveenbalani@rediffmail.com), 技术架构师, Webify Solutions 在这由三部
一、简介   spring容器是整个spring框架的核心,通常我们说的spring容器就是bean工厂,bean工厂负责
一、简介   spring容器是整个spring框架的核心,通常我们说的spring容器就是bean工厂,bean工厂负责
Spring 容器 在 Spring IOC 容器读取 Bean 配置创建 Bean 实例之前, 必须对它进行实例化. 只有在容
续Spring之HelloWorld:http://huangminwen.iteye.com/admin/blogs/1040405 Spring容器启动后,首先
原文: http://mp.weixin.qq.com/s?__biz=MzA3NDcyMTQyNQ==&mid=2649254477&idx=1&sn=7e4fc7094dc96
Spring IOC源码详解之容器依赖注入 上一篇博客中介绍了IOC容器的初始化,通过源码分析大致了解了IOC
1、什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号