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. mtr的用法场景

    ---引用自阿里云 mtr (My traceroute)也是几乎所有 Linux 发行版本预装的网络测试工具.他把 ping和 traceroute 的功能并入了同一个工具中,所以功能更强大. mt ...

  2. 【Docker】Docker 目录

    目录: [Docker]第一篇 Docker的初始化安装部署 [Docker]第二篇 Docker镜像管理 [Docker]第三篇 Docker容器管理 [Docker]第四篇 Docker仓库管理

  3. ceilometer 源码分析(polling)(O版)

    一.简单介绍ceilometer 这里长话短说, ceilometer是用来采集openstack下面各种资源的在某一时刻的资源值,比如云硬盘的大小等.下面是官网现在的架构图 这里除了ceilomet ...

  4. LeetCode 455. Assign Cookies (C++)

    题目: Assume you are an awesome parent and want to give your children some cookies. But, you should gi ...

  5. TeamWork#3,Week5,Scrum Meeting 11.9

    由于经验不足和储备知识不够,最近我们的项目遇到了一些技术问题,需要对项目进行重新计划.我们总结了经验教训,找出了问题所在,明确了要补充的知识,加紧学习,将会在一周之内解决相关问题. 成员 已完成 待完 ...

  6. [buaa-SE-2017]个人作业-Week1

    个人作业-Week1 Part1:教材中不懂的问题 1.根据书中"除了前20的学校之外,计科和软工没有区别"所以计算机科学这个专业也许在我们学校是和软件工程有区别的,但是可以料想的 ...

  7. java实验三 敏捷开发与XP实践

    一.实验内容 (一)敏捷开发与XP 软件开发流程的目的是为了提高软件开发.运营.维护的效率,并提高软件的质量.用户满意度.可靠性和软件的可维护性. 光有各种流程的思想是不够的,我们还要有一系列的工具来 ...

  8. 2018-2019-20172329 《Java软件结构与数据结构》第九周学习总结

    2018-2019-20172329 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十五章-图 一.图及无向图 1.图的相关概 ...

  9. gogoing软件NABCD

    N,need 需求:gogoing项目目前打算做得是一个基于石家庄铁道大学在校大学生对于短期节假日出行旅游的指南.最关键的定义为“穷游”.“穷”则体现在以小的花销去实现最完美的旅游方式.我们的gogo ...

  10. Oracle Form Builder

    Oracle Form Builder 是Oracle的一个开发工具,可以针对Oracle公司的E-Business Suit的ERP系统开发的.对应的还有reports builder. Oracl ...