Spring 3支持@value注解的方式获取properties文件中的配置值,大简化了读取配置文件的代码。

在xml文件中配置properties文件

例如

cas.authn.mongo.collection.name=crmUser

cas.authn.mongo.db.host=mongodb://192.168.30.249:27017/testCrm
cas.authn.mongo.attributes=username,password,phone,crmRoles
cas.authn.mongo.username.attribute=username
cas.authn.mongo.password.attribute=password

在任意xml中加入

<util:properties id="casProperties" location="${cas.properties.config.location:/WEB-INF/cas.properties}"/>
    <context:property-placeholder properties-ref="casProperties"/>

在java文件中即可使用@value注解获取配置文件的值

@Repository("personMongoDB")
public class PersonMongoDB {

private static final Logger LOGGER = LoggerFactory
.getLogger(PersonMongoDB.class);

@Value("${cas.authn.mongo.collection.name:users}")
private String collectionName;

@Value("${cas.authn.mongo.db.name:cas}")
private String databaseName;

@Value("${cas.authn.mongo.db.host:}")
private String mongoHostUri;

@Value("${cas.authn.mongo.attributes:}")
private String attributes;

@Value("${cas.authn.mongo.username.attribute:username}")
private String usernameAttribute;

@Value("${cas.authn.mongo.password.attribute:password}")
private String passwordAttribute;

public void setMongoHostUri(final String mongoHostUri) {
this.mongoHostUri = mongoHostUri;
}

public void setCollectionName(final String collectionName) {
this.collectionName = collectionName;
}

public void setDatabaseName(final String databaseName) {
this.databaseName = databaseName;
}

public void setAttributes(final String attributes) {
this.attributes = attributes;
}

public void setUsernameAttribute(final String usernameAttribute) {
this.usernameAttribute = usernameAttribute;
}

public void setPasswordAttribute(final String passwordAttribute) {
this.passwordAttribute = passwordAttribute;
}

但是有可能@value注解的属性为null值。这种有可能是缺乏第三个步骤的原因。

确保使用@value的类已经注册为bean或者被spring扫描到

使用@value的类必须注册为spring的容器,所以需要注册为bean。

所以这里需要加上

<bean id="personMongoDB" class="self.PersonMongoDB" />

如果不注册为bean,使用spring来自动扫描也是可以的。

一般都是交给spring管理,controller 全部交给springMVC 去扫描的,spring 配置文件里把注解扫描时没有扫描controller,所有会取不到值。

context:component-scan 扫描多个包
 <context:component-scan base-package="com.aaa.service,com.aaa.util"/>

base-package这里扫描需要覆盖PersonMongoDB所在的路径。

被调用的类也必须选择注解的方式

如果前面三个步骤都做了还是null值,可以考虑这个原因:

原因是如果有注入bean的那个类,在被其他类作为对象引用的话(被调用)。这个被调用的类也必须选择注解的方式,注入到调用他的那个类中,不能用 new出来做对象,new出来的对象再注入其他bean就会 发生获取不到的现象。所以要被调用的javabean,都需要@service,交给Spring去管理才可以,这样他就默认注入了。

也就是 例如我上面的PersonMongoDB 在被使用时是不能

new  PersonMongoDB()来使用的,这样注解的属性不会进去。

只能用过注解来使用 PersonMongoDB。

所以我在配置文件中使用到它的bean里配置了PersonMongoDB。

<bean id="attributeRepository" p:backingMap-ref="attrRepoBackingMap"
p:personMongoDB-ref="personMongoDB" class="self.MongoDBPersonAttributeDao" />

<bean id="personMongoDB" class="self.PersonMongoDB" />

遇到问题---java---@value注解为null的更多相关文章

  1. java自定义注解类

    一.前言 今天阅读帆哥代码的时候,看到了之前没有见过的新东西, 比如java自定义注解类,如何获取注解,如何反射内部类,this$0是什么意思? 于是乎,学习并整理了一下. 二.代码示例 import ...

  2. lombok 简化java代码注解

    lombok 简化java代码注解 安装lombok插件 以intellij ide为例 File-->Setting-->Plugins-->搜索"lombok plug ...

  3. 深入理解Java:注解

    注解作用:每当你创建描述符性质的类或者接口时,一旦其中包含重复性的工作,就可以考虑使用注解来简化与自动化该过程. Java提供了四种元注解,专门负责新注解的创建工作. 元注解 元注解的作用就是负责注解 ...

  4. Java Annotation 注解

    java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...

  5. paip.Java Annotation注解的作用and 使用

    paip.Java Annotation注解的作用and 使用 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog. ...

  6. java自定义注解注解方法、类、属性等等【转】

    http://anole1982.iteye.com/blog/1450421 http://www.open-open.com/doc/view/51fe76de67214563b20b385320 ...

  7. Java之注解

    package com.demo.test; import java.lang.annotation.Documented; import java.lang.annotation.ElementTy ...

  8. java 利用注解实现BaseDao 增删查改

    第一步,编写两个注解类,用于表明实体类对应的表名及字段. TableInfo.java 此注解用于标注表名及主键名 import static java.lang.annotation.Element ...

  9. java自定义注解知识实例及SSH框架下,拦截器中无法获得java注解属性值的问题

    一.java自定义注解相关知识 注解这东西是java语言本身就带有的功能特点,于struts,hibernate,spring这三个框架无关.使用得当特别方便.基于注解的xml文件配置方式也受到人们的 ...

  10. JAVA配置&注解方式搭建简单的SpringMVC前后台交互系统

    前面两篇文章介绍了 基于XML方式搭建SpringMVC前后台交互系统的方法,博文链接如下: http://www.cnblogs.com/hunterCecil/p/8252060.html htt ...

随机推荐

  1. Tree - Decision Tree with sklearn source code

    After talking about Information theory, now let's come to one of its application - Decision Tree! No ...

  2. R软件中 文本分析安装包 Rjava 和 Rwordseg 傻瓜式安装方法四部曲

    这两天,由于要做一个文本分析的内容,所以搜索了一天R语言中的可以做文本分析的加载包,但是在安装包的过程,真是被虐千百遍,总是安装不成功.特此专门写一篇博文,把整个心塞史畅快的释放一下. ------- ...

  3. 定时任务crone表达式demo

    1. cron表达式格式: {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 2. cron表达式各占位符解释: {秒数} ==> 允许值范围: 0~59 ,不允许 ...

  4. 第7讲:SQL Server简介

    SQL Server是微软公司提供的一款关系数据库管理系统. 操作数据库有两种方式:SQL语句和可视化的SSMS,该文章所有操作均基于SSMS. 一.SSMS(SQL Server Managemen ...

  5. 20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 结对伙伴 20172326康皓越 博客地址(http://www.cnblogs.com/326477465-a/p/90 ...

  6. 福大软工1816 · 评分结果 · Alpha冲刺

    作业地址:alpha冲刺1.alpha冲刺2.alpha冲刺3.alpha冲刺4.alpha冲刺5.alpha冲刺6.alpha冲刺7.alpha冲刺8.alpha冲刺9.alpha冲刺10 作业提交 ...

  7. 凡事预则立|项目Beta冲刺准备

    1.讨论组长是否重选的议题和结论. 组员一致认为组长不需要重选,我们都很认可组长的表现,组长的付出我们都看在眼里,我们找不出更适合担任组长的人选. 2.下一阶段需要改进完善的功能. 财富值的布局优化以 ...

  8. Hibernate连接数据库一直报NullPointerException

    原来是少了这个.. //private HibernateTemplate hibernateTemplate; //少了下面 public HibernateTemplate getHibernat ...

  9. 第一个spring冲刺第二天

    讨论成员:王俊凯.罗凯杰.王逸辉.马志磊 地点:宿舍 话题:讨论关于安卓的控件的应用和如何调用 选题:四则运算 方向:更加实用的计算器功能,功能更加实用并且简单,没有太多的繁琐操作,可以的话会加上些趣 ...

  10. 《TCP/IP 详解 卷1:协议》第 5 章:Internet 协议

    IP 是 TCPIP 协议族中的核心协议.所有 TCP.UDP.ICMP.IGMP 数据都通过 IP 数据包(又称为 packet)来传输.IP 的英文名为 Internet Protocol,是互联 ...