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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

springmvc通过@Value注解读取Properties配置文件的值,junit测试可以取到值,但是在业务中无法读取

發(fā)布時間:2025/3/15 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springmvc通过@Value注解读取Properties配置文件的值,junit测试可以取到值,但是在业务中无法读取 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

最近試著做了個springmvc 項目,在加入 發(fā)郵件 功能時遇到的問題。

Spring 通過注解獲取*.porperties文件的內(nèi)容,除了xml配置外,還可以通過@value方式來獲取。

@value是需要spring注解掃描的,所以要將spring注解掃描配置中加上實體類的包名路徑,實體類中也應添加@Component

  • @Component??
  • public?class?MailBean?{??
  • ????//實體類前加@Component?,讓spring掃描到該實體類,默認是單例模式,該實體類的功能是從?data.properties?資源文件中讀取對應的內(nèi)容??
  • ????@Value("#{configProperties['emailhost']}")??
  • ????private??String?emailHost;??
  • ????@Value("#{configProperties['emailform']}")??
  • ????private?String?emailFrom;??
  • ????@Value("#{configProperties['emailname']}")??
  • ????private?String?emailUsername;??
  • ????@Value("#{configProperties['emailpassword']}")??
  • ????private??String?emailPassword;??
  • ????public?String?getEmailHost()?{??
  • ????????return?emailHost;??
  • ????}??
  • ??????
  • ????public?String?getEmailFrom()?{??
  • ????????return?emailFrom;??
  • ????}??
  • ??
  • ????public?String?getEmailUsername()?{??
  • ????????return?emailUsername;??
  • ????}??
  • ??
  • ????public?String?getEmailPassword()?{??
  • ????????return?emailPassword;??
  • ????}??
  • @Component public class MailBean {//實體類前加@Component ,讓spring掃描到該實體類,默認是單例模式,該實體類的功能是從 data.properties 資源文件中讀取對應的內(nèi)容@Value("#{configProperties['emailhost']}")private String emailHost;@Value("#{configProperties['emailform']}")private String emailFrom;@Value("#{configProperties['emailname']}")private String emailUsername;@Value("#{configProperties['emailpassword']}")private String emailPassword;public String getEmailHost() {return emailHost;}public String getEmailFrom() {return emailFrom;}public String getEmailUsername() {return emailUsername;}public String getEmailPassword() {return emailPassword;}

    spring配置文件部分代碼如下?

    ?

  • <!--?自動掃描bugkiller包?,將帶有注解的類?納入spring容器管理?-->??
  • <context:component-scan?base-package="com.myweb"></context:component-scan>??
  • ??
  • <!--?引入配置文件?-->??
  • <bean?id="configProperties"?class="org.springframework.beans.factory.config.PropertiesFactoryBean">??
  • ????<property?name="locations">??
  • ????????<list>??
  • ????????<value>classpath:data.properties</value>??
  • ????????????<value>classpath:application.properties</value>??
  • ????????</list>??
  • ????</property>??
  • </bean>??
  • <bean?id="propertyConfigurer"?class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">??
  • ????<property?name="properties"?ref="configProperties"?/>??
  • </bean>??
  • <!-- 自動掃描bugkiller包 ,將帶有注解的類 納入spring容器管理 --><context:component-scan base-package="com.myweb"></context:component-scan><!-- 引入配置文件 --><bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"><property name="locations"><list><value>classpath:data.properties</value><value>classpath:application.properties</value></list></property></bean><bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"><property name="properties" ref="configProperties" /></bean>

    資源文件內(nèi)容為

    emailhost=郵箱的網(wǎng)關
    emailname=你的用戶名
    emailpassword=你的密碼
    emailform=發(fā)件郵箱 ? //具體值需根據(jù)自身情況配置

    這樣配置完了,從junit測試中可以正常取到 properties中配置的值

    ?

  • @Test??
  • public?void?test(){??
  • ?????
  • ???????ApplicationContext?appContext?=?new?ClassPathXmlApplicationContext("applicationContext.xml");??
  • ???????MailBean?connInfo?=?appContext.getBean(MailBean.class);??
  • ???????System.out.println(connInfo.getEmailHost());??
  • ???????System.out.println(connInfo.getEmailFrom());??
  • @Testpublic void test(){ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");MailBean connInfo = appContext.getBean(MailBean.class);System.out.println(connInfo.getEmailHost());System.out.println(connInfo.getEmailFrom());

    ?

  • <span?style="white-space:pre">????????</span>//可以正常獲取<span?style="white-space:pre">???</span>??
  • ????????System.out.println(connInfo.getEmailUsername());??
  • ????}??
  • <span style="white-space:pre"> </span>//可以正常獲取<span style="white-space:pre"> </span>System.out.println(connInfo.getEmailUsername());}

    但一在具體業(yè)務中使用的時候get到的是null

    后來發(fā)現(xiàn)原來我在業(yè)務中還是用的 new來創(chuàng)建的實體類 Mailbean ,但Mailbean ?已經(jīng)通過@Component 加入了Spring的管理中了,并且默認的單例,直接new肯定是不對的 ,所以在業(yè)務中通過?
    @Resource private MailBean mailBean; 注入進來,當然該業(yè)務類之前也要加注釋交給spring管理, 這樣就能成功的取到值了,在junit測試時是通過

    ?

  • MailBean?connInfo?=?appContext.getBean(MailBean.class);??
  • MailBean connInfo = appContext.getBean(MailBean.class);

    獲取的bean,所以能正常取值,在業(yè)務中的話記得要通過@resource 注入進來,不然是獲取不到該bean的奧,

    另外在修改spring 配置文件時,添加如下代碼時會拋出一些警告,說是沒有權限創(chuàng)建某些文件?

    <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    ? ? ? ? <property name="locations">
    ? ? ? ? ? ? <list>
    ? ? ? ? ? ? <value>classpath:data.properties</value>
    ? ? ? ? ? ? ? ? <value>classpath:application.properties</value>
    ? ? ? ? ? ? </list>
    ? ? ? ? </property>
    ? ? </bean>

    警告 :?Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKey 等等。。。

    應該實在寫入注冊表是權限不夠引起的 ,只需在命令窗口打開 regedit注冊表管理,在?HKEY_LOCAL_MACHINE\Software\JavaSoft\ ?下創(chuàng)建 Prefs項即可

    總結(jié)

    以上是生活随笔為你收集整理的springmvc通过@Value注解读取Properties配置文件的值,junit测试可以取到值,但是在业务中无法读取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。