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

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

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

  1. @Component
  2. public class MailBean {
  3. //实体类前加@Component ,让spring扫描到该实体类,默认是单例模式,该实体类的功能是从 data.properties 资源文件中读取对应的内容
  4. @Value("#{configProperties['emailhost']}")
  5. private  String emailHost;
  6. @Value("#{configProperties['emailform']}")
  7. private String emailFrom;
  8. @Value("#{configProperties['emailname']}")
  9. private String emailUsername;
  10. @Value("#{configProperties['emailpassword']}")
  11. private  String emailPassword;
  12. public String getEmailHost() {
  13. return emailHost;
  14. }
  15. public String getEmailFrom() {
  16. return emailFrom;
  17. }
  18. public String getEmailUsername() {
  19. return emailUsername;
  20. }
  21. public String getEmailPassword() {
  22. return emailPassword;
  23. }
@Component
public 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配置文件部分代码如下

  1. <!-- 自动扫描bugkiller包 ,将带有注解的类 纳入spring容器管理 -->
  2. <context:component-scan base-package="com.myweb"></context:component-scan>
  3. <!-- 引入配置文件 -->
  4. <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  5. <property name="locations">
  6. <list>
  7. <value>classpath:data.properties</value>
  8. <value>classpath:application.properties</value>
  9. </list>
  10. </property>
  11. </bean>
  12. <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
  13. <property name="properties" ref="configProperties" />
  14. </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中配置的值

  1. @Test
  2. public void test(){
  3. ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
  4. MailBean connInfo = appContext.getBean(MailBean.class);
  5. System.out.println(connInfo.getEmailHost());
  6. 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());
  1. <span style="white-space:pre">        </span>//可以正常获取<span style="white-space:pre">   </span>
  2. System.out.println(connInfo.getEmailUsername());
  3. }
<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测试时是通过

  1. MailBean connInfo = 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项即可

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

  1. Spring @Value:读取Properties配置文件

    非 @Value方式:基于ResourceLoader读取Properties配置文件 以下为通过Spring @Value:读取Properties配置文件 1.1 前提 测试属性文件:advanc ...

  2. Spring Boot——读取.properties配置文件解决方案

    解决方案 Spring Boot 读取properties配置文件时,默认读取的是application.properties. 方法一:@ConfigurationProperties注解方式 @C ...

  3. Java读取Properties配置文件

    目录 1.Properties类与Properties配置文件 2.Properties中的主要方法 3.示例 1.Properties类与Properties配置文件 Properties类继承自H ...

  4. 如何在spring中读取properties配置文件里面的信息

    如何在spring中读取properties配置文件里面的信息 <!-- 正文开始 --> 一般来说.我们会将一些配置的信息放在.properties文件中. 然后使用${}将配置文件中的 ...

  5. Java 读取 .properties 配置文件的几种方式

    Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中.然而 XML 配置文件需要通过 DOM 或 SAX 方式解析,而读取 properties 配 ...

  6. 【转载】java读取.properties配置文件的几种方法

    读取.properties配置文件在实际的开发中使用的很多,总结了一下,有以下几种方法(仅仅是我知道的): 一.通过jdk提供的java.util.Properties类. 此类继承自java.uti ...

  7. python读取配置文件获取所有键值对_Python读取properties配置文件操作示例

    本文实例讲述了Python读取properties配置文件操作.分享给大家供大家参考,具体如下: 工作需要将Java项目的逻辑改为python执行,Java的很多配置文件都是.properties的, ...

  8. java如何读取.properties配置文件

    Properties类 1.简介 Properties 继承于 Hashtable.表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串.由于继承于Hashtable,当从配置文件中读取出配 ...

  9. java读取.properties配置文件的几种方法

    读取.properties配置文件在实际的开发中使用的很多,总结了一下,有以下几种方法(仅仅是我知道的): 一.通过jdk提供的java.util.Properties类. 此类继承自java.uti ...

最新文章

  1. python设计模式(十三):解释器模式
  2. 一个切割PDF文件的简单的方法 -只需要chrome浏览器
  3. Understanding Global Unicast IPv6 Addressing
  4. 计算机实践报告800字,计算机软件专业大学生社会实践报告800字
  5. 利用Bootstrap+Avalonjs+EntityFramework 开发ASP.NET WebForm应用程序(上)
  6. 重操JS旧业第十一弹:BOM对象
  7. cocos2dx游戏--欢欢英雄传说--添加攻击按钮
  8. set vector_Java Vector set()方法与示例
  9. JAVA入门级教学之(方法重写/方法重载)
  10. 数据结构入门之链表(C语言实现)
  11. 华为ebgp_BGP选路原则之首选值(华为特性)
  12. TCP/IP 和 TCP/IP的 三/四次握手
  13. 遇到一个日志文件变化带来的文件句柄问题
  14. 约瑟夫环问题:猴子选大王
  15. 要么战胜,要么战死,绝不投降
  16. CRMEBv3.1微商城源码,含小程序商城,公众号商城,H5商城
  17. python未知长度数组,python – 从具有未知维数的numpy数组中提取超立方体块
  18. maximo跟java_maximo遇到的错误问题
  19. 云文件共享服务器,云文件共享服务器软件
  20. 发票查验API可以查验的发票类型有哪些?

热门文章

  1. oracle 存储过程 db,oracle数据库的存储过程是什么?
  2. 车联网大数据框架_大数据基础:ORM框架入门简介
  3. mysql blob 好处_MySQL中的BLOB类型
  4. python语言中包含的标准数据类型_python标准数据类型(笔记一)
  5. uniapp 输入框防抖节流_拉动一下控制台大小,后台请求数量爆炸,竟是没做好防抖与节流...
  6. 专科学python真的不好_专科生转行做python运维靠谱吗?
  7. 访问修饰符作用范围由大到小是_9个java基础小知识
  8. unittest-读取yaml文件
  9. mysql添加用户及权限
  10. 字典超详细--python