国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Spring框架:Spring容器詳解

2019-11-08 03:17:20
字體:
供稿:網(wǎng)友

SPRing框架:Spring容器詳解

時間 2014-09-18 21:40:16 CSDN博客原文  http://blog.csdn.net/caipeichao2/article/details/39378821 主題 Spring

Spring容器

Spring容器可以幫助你管理所有的Bean對象,專業(yè)術(shù)語稱之為IoC控制反轉(zhuǎn)。在傳統(tǒng)的程序中,對象的生成都是由開發(fā)者完成的。而在控制反轉(zhuǎn)中,對象的生成全部都交給框架完成。這樣的好處就是減少了程序的依賴性。

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

實例化。Spring通過new關(guān)鍵字將一個Bean進(jìn)行實例化,javaBean都有默認(rèn)的構(gòu)造函數(shù),因此不需要提供構(gòu)造參數(shù)。填入屬性。Spring根據(jù)xml文件中的配置通過調(diào)用Bean中的setXXX方法填入對應(yīng)的屬性。事件通知。Spring依次檢查Bean是否實現(xiàn)了BeanNameAware、BeanFactoryAware、applicationContextAware、BeanPostProcessor、InitializingBean接口,如果有的話,依次調(diào)用這些接口。使用。應(yīng)用程序可以正常使用這個Bean了。銷毀。如果Bean實現(xiàn)了DisposableBean接口,就調(diào)用其destroy方法。

定義一個Bean的語法如下。

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

使用這個Bean時只要通過applicationContext.getBean("apple")即可獲取。

作用域。在Spring中還可以指定Bean的作用域,也就是Bean的壽命,只要設(shè)置bean標(biāo)簽的scope屬性即可。Spring提供的生命周期有:singleton整個應(yīng)用只有一個、prototype每次調(diào)用都產(chǎn)生一個新的、request每個HTTP請求對應(yīng)一個bean、session每個HTTP會話對應(yīng)一個bean、global-session每個portlet上下文session對應(yīng)一個bean。默認(rèn)生命周期是singleton。

初始化和銷毀。第一種方法,在xml中的bean標(biāo)簽增加init-method和destroy-method屬性來指定初始化和銷毀方法。第二種方法,在bean的java類中implements InitializingBean或者DisposableBean接口實現(xiàn)初始化和銷毀。第三種方法,在xml中的beans標(biāo)簽中增加default-init-method和default-destroy-method屬性。

另外,可以通過RPC或者JMS配置遠(yuǎn)程Bean。后面的章節(jié)有介紹。

外部配置

有時候有些關(guān)鍵的屬性,比如數(shù)據(jù)庫密碼,需要放在xml文件之外,便于后續(xù)修改。Spring解決這個問題的方法有兩種,一種是屬性占位符,一種是屬性重寫。另外阿里提供的AutoConfig有更好的配置管理機(jī)制,將在后面詳細(xì)介紹。

關(guān)于占位符,首先載入屬性文件:

<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文件并覆蓋現(xiàn)有的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文件的內(nèi)容:

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

加密配置值。載入經(jīng)過加密的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一般不需要直接操作,而是將數(shù)據(jù)保存到Bean容器中的scope=session中。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 抚州市| 建宁县| 游戏| 辽宁省| 贵州省| 宜宾市| 临泉县| 章丘市| 田林县| 秦安县| 临潭县| 石狮市| 华坪县| 西华县| 库伦旗| 宜君县| 辽源市| 南平市| 光山县| 类乌齐县| 日照市| 石嘴山市| 察哈| 灵武市| 青河县| 龙南县| 于田县| 广汉市| 昌江| 凤翔县| 井研县| 武功县| 周宁县| 隆尧县| 湄潭县| 崇信县| 曲麻莱县| 兴隆县| 沙雅县| 土默特左旗| 新余市|