1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > springmvc通过@Value注解读取Properties配置文件的值 junit测试可以取到值 但是在业务中无法读取

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

时间:2019-04-10 04:27:55

相关推荐

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

最近试着做了个springmvc 项目,在加入 发邮件 功能时遇到的问题。

Spring 通过注解获取*.porperties文件的内容,除了xml配置外,还可以通过@value方式来获取。

@value是需要spring注解扫描的,所以要将spring注解扫描配置中加上实体类的包名路径,实体类中也应添加@Component

@ComponentpublicclassMailBean{//实体类前加@Component,让spring扫描到该实体类,默认是单例模式,该实体类的功能是从data.properties资源文件中读取对应的内容@Value("#{configProperties['emailhost']}")privateStringemailHost;@Value("#{configProperties['emailform']}")privateStringemailFrom;@Value("#{configProperties['emailname']}")privateStringemailUsername;@Value("#{configProperties['emailpassword']}")privateStringemailPassword;publicStringgetEmailHost(){returnemailHost;}publicStringgetEmailFrom(){returnemailFrom;}publicStringgetEmailUsername(){returnemailUsername;}publicStringgetEmailPassword(){returnemailPassword;}

@Componentpublic class MailBean {//实体类前加@Component ,让spring扫描到该实体类,默认是单例模式,该实体类的功能是从 data.properties 资源文件中读取对应的内容@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-scanbase-package="com.myweb"></context:component-scan><!--引入配置文件--><beanid="configProperties"class="org.springframework.beans.factory.config.PropertiesFactoryBean"><propertyname="locations"><list><value>classpath:data.properties</value><value>classpath:application.properties</value></list></property></bean><beanid="propertyConfigurer"class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"><propertyname="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>

资源文件内容为

emailhost=邮箱的网关

emailname=你的用户名

emailpassword=你的密码

emailform=发件邮箱 //具体值需根据自身情况配置

这样配置完了,从junit测试中可以正常取到 properties中配置的值

@Testpublicvoidtest(){ApplicationContextappContext=newClassPathXmlApplicationContext("applicationContext.xml");MailBeanconnInfo=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());

<spanstyle="white-space:pre"></span>//可以正常获取<spanstyle="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());}

但一在具体业务中使用的时候get到的是null

后来发现原来我在业务中还是用的 new来创建的实体类 Mailbean ,但Mailbean 已经通过@Component 加入了Spring的管理中了,并且默认的单例,直接new肯定是不对的 ,所以在业务中通过

@Resource private MailBean mailBean; 注入进来,当然该业务类之前也要加注释交给spring管理, 这样就能成功的取到值了,在junit测试时是通过

MailBeanconnInfo=appContext.getBean(MailBean.class);

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

获取的bean,所以能正常取值,在业务中的话记得要通过@resource 注入进来,不然是获取不到该bean的奥,

另外在修改spring 配置文件时,添加如下代码时会抛出一些警告,说是没有权限创建某些文件

<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\ 下创建 Prefs项即可

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。