Spring框架:Spring容器具体解释
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容器具体解释的更多相关文章
- 跟着刚哥学习Spring框架--Spring容器(二)
Spring容器 启动Spring容器(实例化容器) -- IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化(加载启动),这样才可以从容器中获取Bean的实例并使用. Bean是S ...
- Spring框架IOC容器和AOP解析 非常 有用
Spring框架IOC容器和AOP解析 主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面 ...
- Spring框架 - Spring和Spring框架组成
Spring框架 - Spring和Spring框架组成 Spring是什么?它是怎么诞生的?有哪些主要的组件和核心功能呢? 本文通过这几个问题帮助你构筑Spring和Spring Framework ...
- [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.
前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...
- Spring框架IOC容器和AOP解析
主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置 一.S ...
- spring框架--IOC容器,依赖注入
思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action 多个 [维护成员变量] service 一个 [不需要维护公共变量] dao 一个 [不需要维护 ...
- Spring 框架学习 —— 容器
容器是 Spring 框架的核心.Spring 容器使用 DI(依赖注入)机制管理构成应用的组件(类),所谓 DI,也即是其能够创建相互协作的组件(类)之间的关联(依赖). 1. 应用上下文(Appl ...
- [Spring框架]Spring开发实例: XML+注解.
前言: 本文为自己学习Spring记录所用, 文章内容包括Spring的概述已经简单开发, 主要涉及IOC相关知识, 希望能够对新入门Spring的同学有帮助, 也希望大家一起讨论相关的知识. 一. ...
- [Spring框架]Spring IOC的原理及详解。
这里感谢 CSDN 的原博客:http://blog.csdn.net/m13666368773/article/details/7802126 看后 受益匪浅,这里再重温一遍Spring IOC ...
- JavaWeb_(Spring框架)Spring中IoC与DI概念入门
Spring是于2003 年兴起的一个轻量级的Java 开源框架,它由Rod Johnson创建.传统J2EE应用的开发效率低,Spring作为开源的中间件,提供J2EE应用的各层的解决方案,Spri ...
随机推荐
- iOS 一些struct类型的NSLog输出格式-b
我们经常会输出一些坐标尺寸信息之类的,比如view的frame,是CGRect类型的,用frame.oringial.x 和frame.size.width来做NSLog参数好麻烦,还好苹果对这些常用 ...
- android开发环境重装系统之后的配置
前提: 之前配置好的android开发环境:重装系统:压缩了android目录 配置: 安装java环境 安装; 建立JAVA_HOME变量:JAVAHOME添加到path变量 JAVA_HOME=C ...
- Object.defineProperty
属性类型ECMA-262第5版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征.ECMA-262定义这些特性是为了实现JavaScript引擎用的,因此在Ja ...
- 关于Java(JDBC连接数据库)
Processing SQL Statements with JDBC 处理JDBC中的SQL语句 这节主要是 JDBC 与数据库交互的基本步骤 JDBC的基石是DriverManager,通过它,J ...
- adb logcat 查看日志
使用 logcat 命令 查看和跟踪系统日志缓冲区的命令logcat的一般用法是: [adb] logcat [<option>] ... [<filter-spec>] .. ...
- Central Europe Regional Contest 2012 Problem I: The Dragon and the Knights
一个简单的题: 感觉像计算几何,其实并用不到什么计算几何的知识: 方法: 首先对每条边判断一下,看他们能够把平面分成多少份: 然后用边来对点划分集合,首先初始化为一个集合: 最后如果点的集合等于平面的 ...
- eclipse中配置c++开发环境 Eclipse + CDT + MinGW
转自eclipse中配置c++开发环境 Eclipse + CDT + MinGW 基本框架:Eclipse + CDT + MinGW 背景知识: CDT:CDT 是完全用 Java 实现的开放源码 ...
- PYTHON--CLASS
class Robot: population = 0 def __init__(self, name): self.name = name print("(Initializing {0} ...
- PS命令删除所有EXCHANGE2013内用户邮件
因为在测试的时间产生了大量测试邮件,所以在正式上线前,要删除所有用户的邮件. 命令如下: Get-Mailbox | Search-Mailbox -DeleteContent
- 任正非:华为三十年大限快到了 想不死就得新生(建立战略预备队)cool
华为心声社区官方微信今日发布了任正非8月15日在华为公司内部做的关于战略预备队建设汇报的讲话.讲话内容中提到,华为公司需要组织.结构.人才等所有一切都变化,通过变化使新的东西成长起来. 任正非表示 ...