日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring properties定义bean

發布時間:2025/3/8 javascript 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring properties定义bean 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

Spring提供了豐富的標簽和注解來進行bean的定義,除此之外框架來提供了擴展機制讓使用可以通過properties來定義bean,與強大的標簽式和注解式的bean定義相比,properties提供的規則要簡單許多。

key部分用.分隔即通過A.B來進行相關的屬性定義,其中A表示bean名稱,B通過不同的值還表達不同的含義:

?

  • (class),bean的類型
  • (parent),bean的父bean
  • name,bean的name屬性,name是一個普通屬性
  • childBean(ref),bean的childBean屬性,childBean是一個引用屬性
  • (singleton),是否單例
  • (lazy-init),是否懶加載
  • $0,第一個構造子參數
  • (scope),作用域
  • (abstract),是否是抽象bean

?

看一個例子:

bean.properties文件

?

[java]?view plain?copy

  • #bean1??
  • propBean.(class)?=?spring.beans.properties.PropBean??
  • propBean.(parent)?=?commonBean??
  • propBean.name?=?name1??
  • propBean.childBean(ref)?=?childBean??
  • propBean.(singleton)?=?true??
  • propBean.(lazy-init)?=?true??
  • ??
  • #bean2??
  • childBean.(class)?=?spring.beans.properties.ChildBean??
  • childBean.$0?=?cid1??
  • chlldBean.(scope)?=?singleton??
  • ??
  • #abstract?bean??
  • commonBean.(class)?=?spring.beans.properties.CommonBean??
  • commonBean.id?=?1??
  • commonBean.(abstract)?=?true??
  • 上面的properties文件定義了三個bean:

    ?

    ?

    • commonBean,類型是spring.beans.properties.CommonBean,注入值1到id屬性,這是一個抽象bean
    • childBean,類型spring.beans.properties.ChildBean,構造器注入cid1,作用域是singleton
    • propBean,類型是spring.beans.properties.PropBean,父bean是commonBean,注入一個普通屬性name,和引用屬性childBean,引用的bean是childBean,bean是單例并且懶加載。

    ?

    bean定義文件寫好之后,通過PropertiesBeanDefinitionReader來加載解析bean定義,這個解析器的原理很簡單,在此不做詳細分析,下面是實例代碼。

    ?

    [java]?view plain?copy

  • public?void?test()?{??
  • ????GenericApplicationContext?ctx?=?new?GenericApplicationContext();??
  • ????Resource?res?=?new?ClassPathResource(??
  • ????????????"spring/beans/properties/bean.properties");??
  • ????PropertiesBeanDefinitionReader?propReader?=?new?PropertiesBeanDefinitionReader(??
  • ????????????ctx);??
  • ????propReader.loadBeanDefinitions(res);??
  • ????PropBean?propBean?=?(PropBean)?ctx.getBean("propBean");??
  • ????assertNotNull(propBean);??
  • ????assertNotNull(propBean.getId());??
  • ??
  • ????assertNotNull(propBean.getChildBean());??
  • ????assertNotNull(propBean.getChildBean().getCid());??
  • }??
  • 也可以完全不用單獨定義個properties文件,只需要把相關的key-value放到一個Map中,再通過PropertiesBeanDefinitionReader加載這個map中的key-value。

    ?

    通過這種方式,使用者可以根據需要自定義些bean的定義規則,比如可以把bean定義放在數據庫中,把數據庫中的信息讀取出來拼接成滿足properties規則的bean定義,在Spring中就定義了一個org.springframework.jdbc.core.support.JdbcBeanDefinitionReader來完成這種需求,看下這個類的代碼。

    ?

    [java]?view plain?copy

  • public?class?JdbcBeanDefinitionReader?{??
  • ??
  • ????private?final?PropertiesBeanDefinitionReader?propReader;??
  • ??
  • ????private?JdbcTemplate?jdbcTemplate;??
  • ??
  • ??
  • ????/**?
  • ?????*?Create?a?new?JdbcBeanDefinitionReader?for?the?given?bean?factory,?
  • ?????*?using?a?default?PropertiesBeanDefinitionReader?underneath.?
  • ?????*?<p>DataSource?or?JdbcTemplate?still?need?to?be?set.?
  • ?????*?@see?#setDataSource?
  • ?????*?@see?#setJdbcTemplate?
  • ?????*/??
  • ????public?JdbcBeanDefinitionReader(BeanDefinitionRegistry?beanFactory)?{??
  • ????????this.propReader?=?new?PropertiesBeanDefinitionReader(beanFactory);??
  • ????}??
  • ??
  • ????/**?
  • ?????*?Create?a?new?JdbcBeanDefinitionReader?that?delegates?to?the?
  • ?????*?given?PropertiesBeanDefinitionReader?underneath.?
  • ?????*?<p>DataSource?or?JdbcTemplate?still?need?to?be?set.?
  • ?????*?@see?#setDataSource?
  • ?????*?@see?#setJdbcTemplate?
  • ?????*/??
  • ????public?JdbcBeanDefinitionReader(PropertiesBeanDefinitionReader?beanDefinitionReader)?{??
  • ????????Assert.notNull(beanDefinitionReader,?"Bean?definition?reader?must?not?be?null");??
  • ????????this.propReader?=?beanDefinitionReader;??
  • ????}??
  • ??
  • ??
  • ????/**?
  • ?????*?Set?the?DataSource?to?use?to?obtain?database?connections.?
  • ?????*?Will?implicitly?create?a?new?JdbcTemplate?with?the?given?DataSource.?
  • ?????*/??
  • ????public?void?setDataSource(DataSource?dataSource)?{??
  • ????????this.jdbcTemplate?=?new?JdbcTemplate(dataSource);??
  • ????}??
  • ??
  • ????/**?
  • ?????*?Set?the?JdbcTemplate?to?be?used?by?this?bean?factory.?
  • ?????*?Contains?settings?for?DataSource,?SQLExceptionTranslator,?NativeJdbcExtractor,?etc.?
  • ?????*/??
  • ????public?void?setJdbcTemplate(JdbcTemplate?jdbcTemplate)?{??
  • ????????Assert.notNull(jdbcTemplate,?"JdbcTemplate?must?not?be?null");??
  • ????????this.jdbcTemplate?=?jdbcTemplate;??
  • ????}??
  • ??
  • ??
  • ????/**?
  • ?????*?Load?bean?definitions?from?the?database?via?the?given?SQL?string.?
  • ?????*?@param?sql?SQL?query?to?use?for?loading?bean?definitions.?
  • ?????*?The?first?three?columns?must?be?bean?name,?property?name?and?value.?
  • ?????*?Any?join?and?any?other?columns?are?permitted:?e.g.?
  • ?????*?{@code?SELECT?BEAN_NAME,?PROPERTY,?VALUE?FROM?CONFIG?WHERE?CONFIG.APP_ID?=?1}?
  • ?????*?It's?also?possible?to?perform?a?join.?Column?names?are?not?significant?--?
  • ?????*?only?the?ordering?of?these?first?three?columns.?
  • ?????*/??
  • ????public?void?loadBeanDefinitions(String?sql)?{??
  • ????????Assert.notNull(this.jdbcTemplate,?"Not?fully?configured?-?specify?DataSource?or?JdbcTemplate");??
  • ????????final?Properties?props?=?new?Properties();??
  • ????????this.jdbcTemplate.query(sql,?new?RowCallbackHandler()?{??
  • ????????????public?void?processRow(ResultSet?rs)?throws?SQLException?{??
  • ????????????????String?beanName?=?rs.getString(1);??
  • ????????????????String?property?=?rs.getString(2);??
  • ????????????????String?value?=?rs.getString(3);??
  • ????????????????//?Make?a?properties?entry?by?combining?bean?name?and?property.??
  • ????????????????props.setProperty(beanName?+?"."?+?property,?value);??
  • ????????????}??
  • ????????});??
  • ????????this.propReader.registerBeanDefinitions(props);??
  • ????}??
  • ??
  • }??
  • 此外,通過理解PropertiesBeanDefinitionReader的實現方式,發現也可以通過擴展BeanDefinitionReader來擴展bean定義,我們可以通過繼承AbstractBeanDefinitionReader來完成這種擴展。

    轉載于:https://my.oschina.net/xiaominmin/blog/1611342

    總結

    以上是生活随笔為你收集整理的Spring properties定义bean的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 合欢视频在线观看 | 加勒比日韩 | 丁香激情五月少妇 | 色爽爽爽爽爽爽爽爽 | 国产免费观看一区 | 韩国av一区 | 美国黄色一级毛片 | 女生隐私免费看 | 国产叼嘿视频 | 久久嫩| 这里只有精品视频在线 | 日韩中文字幕网址 | aa亚洲 | 国产高清视频免费观看 | 夜夜操天天操 | 最新av免费在线观看 | 99热国 | 欧美成人精品一区二区综合免费 | 国产按摩一区二区三区 | 午夜性影院 | 男生和女生差差视频 | 黄色小说视频网站 | 免费av看片| 免费国产区 | 1024手机在线观看 | 最新国产拍偷乱偷精品 | 成人免费性生活视频 | 欧美xx孕妇 | 成人激情在线观看 | 女生张开腿给男生桶 | 日韩少妇裸体做爰视频 | 久久久久久无码精品人妻一区二区 | 一区二区三区四区在线视频 | 超碰人操 | 欧美老女人性视频 | 波多野结衣视频免费在线观看 | 天堂在线视频免费观看 | 亚洲精品91天天久久人人 | 天天干天天色天天 | 日本成人在线免费观看 | 精品人妻午夜一区二区三区四区 | 中文字幕日产 | 国产电影一区二区三区爱妃记 | 亚洲免费影院 | 日日干日日爽 | 成人免费视频网 | 婷婷天堂网 | 日韩二区 | 午夜羞羞网站 | 深夜免费视频 | 国模精品视频一区二区 | jizzz18| 亚洲成人国产 | 欧美xxxx黑人 | 国产精品13p| 日韩小视频在线观看 | 怡春院欧美 | 一区二区三区www污污污网站 | 亚洲爱色 | 日韩一区二区免费在线观看 | 精品一区二区在线观看 | 国产欧美一级片 | 在线观看三区 | 久操视频在线 | 先锋av资源 | 国产黄色成人 | 99re最新网址 | 国产精品无码久久久久久 | 久久免费看少妇高潮v片特黄 | 人妻丰满熟妇av无码区 | 91夫妻论坛| 亚洲人成在线播放 | 亚洲综合成人在线 | 欧美性猛交69 | 国产女人和拘做受视频免费 | 黄色三级免费网站 | 黄色性网站| 国产丰满麻豆 | 日本xx视频 | 麻豆国产在线播放 | 蜜臀av粉嫩av懂色av | 免费黄av| 欧美综合在线视频 | 国产精品久久久免费 | 国产精品中文无码 | 五月天六月婷婷 | 欧美精品一区二区蜜臀亚洲 | 在线播放www | 一级片免费| 久久视频在线播放 | 免费看av软件 | 精品妇女一区二区三区 | 免费在线观看黄视频 | 亚洲精品乱码久久久久久黑人 | 国精产品一区二区 | 日韩av中文在线观看 | 成人日b视频 | 亚洲国产精彩视频 | 好吊妞精品视频 |