`
network-eagle
  • 浏览: 58216 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

扩展 properties 注解

阅读更多
1:创建注解
/**
 * 
 * @author ZhangKaiTao
 *
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Properties {
	String name();
}

2:扩展
/**
 * 
 * @author ZhangKaiTao
 *
 */
public class AnnotationBeanPostProcessor extends PropertyPlaceholderConfigurer
		implements BeanPostProcessor, InitializingBean {

	private static transient Log logger = LogFactory
			.getLog(AnnotationBeanPostProcessor.class);

	private java.util.Properties pros;

	@SuppressWarnings("unchecked")
	private Class[] enableClassList = { String.class };

	@SuppressWarnings("unchecked")
	public void setEnableClassList(Class[] enableClassList) {
		this.enableClassList = enableClassList;
	}

	public Object postProcessAfterInitialization(Object bean, String beanName)
			throws BeansException {

		Field[] fields = bean.getClass().getDeclaredFields();

		for (Field field : fields) {
			 			if (field.isAnnotationPresent(Properties.class)) {
				if (filterType(field.getType().toString())) {
					Properties p = field.getAnnotation(Properties.class);
					try {
						ReflectionUtils.makeAccessible(field);
						field.set(bean, pros.getProperty(p.name()));
					} catch (Exception e) {
						logger.error(" --- ", e);
					}
				}
			}
		}

		return bean;
	}

	@SuppressWarnings("unchecked")
	private boolean filterType(String type) {

		if (type != null) {
			for (Class c : enableClassList) {
				if (c.toString().equals(type)) {
					return true;
				}
			}
			return false;
		} else {
			return true;
		}
	}

	public Object postProcessBeforeInitialization(Object bean, String beanName)
			throws BeansException {
		return bean;
	}

	public void afterPropertiesSet() throws Exception {
		pros = mergeProperties();
	}
}

3:配置
<bean id="propertyConfigurer" class="withub.system.versioncontrol.com.AnnotationBeanPostProcessor" scope="singleton">
		<property name="locations">
			<list>
				<value>classpath:db.properties</value>
			</list>
		</property>
	</bean> 

4:使用
@Properties(name="fydm")
	private String fydm;
分享到:
评论

相关推荐

    properties:Go的Java属性扫描器

    它支持从多个文件或URL进行读取,并将${key}类的表达式的Spring样式递归属性扩展为它们的相应值。 值表达式可以引用${key}其他键,也可以引用${USER}环境变量。 文件名还可以包含/home/${USER}/myapp.properties...

    eclipse-external-annotations-m2e-plugin:M2E扩展,用于从pom.xml设置Eclipse外部注释

    Eclipse Maven集成(M2E扩展)用于空分析配置Eclipse外部批注的路径以对Maven Dependencies和JRE容器类路径容器进行空分析,并设置JDT编译器配置: 允许从maven-compiler-plugin配置Java编译器项目属性; 从包含org....

    spring杂谈 作者zhang KaiTao

    1.3 Spring开闭原则的表现-BeanPostProcessor的扩展点-1 1.4 我对IoC/DI的理解 1.5 SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结 1.6 »Spring 之AOP AspectJ切入点语法详解(最全了,不需要再去...

    GhidraX64Dbg:将注释从Ghidra提取到X32X64 dbg数据库中

    GhidraX64Dbg 扩展包含Ghidra脚本,可将注释从Ghidra导出到X32 / X64数据库。潜在更好的项目更新:签出 。 他们提供的产品似乎比该项目完成的简单同步功能要强大得多,并支持更广泛的调试器和RE程序集。简易安装从...

    通用工具类

    6.扩展Properties类,添加支持注释的保存和保留文件原顺序的功能 7. Zip压缩文件工具类 8.利用反射机制进行排序工具类,支持数组、List、Set、Map的排序,可以支持多属性排序,支持子对象中的属性排序(例user对象中...

    代码统计插件 eclipse plugin java

    义.properties文件的注释是只有当行首的字符为“#”时认为是一个注释,否则如果行空 则认为是一个空行,其他的则认为是一个代码行。则代码如下: package count; import java.io.BufferedReader; import java.io....

    基于Apache Nutch和Solr的AJAX页面内容爬取与处理设计源码

    该系统通过Apache Nutch和Solr以及Htmlunit, Selenium WebDriver等组件扩展,实现了对于AJAX加载类型页面的完整页面内容爬取、解析、清洗、持久化、全文检索等处理。项目结构清晰,代码注释详尽,适合用于学习和研究...

    activiti 基础 web项目 spring mvc

    4.程序中使用的是spring mvc注解的方式,可扩展的地方也很多,我是从网上下的maven项目,然后自己改成web项目,除了整个架子外,其他的都是我自己的东西 5.目前能实现的功能就是走一个流程,适合初学者研究 我深知...

    jeesite后台框架

    授权模块,支持CAS单点登录,简单properties配置即可,不用再写很多的xml。 支持多数据源,简单properties配置即可实现,为了安全性吧,暂不提供界面维护数据源,不存数据库。 数据表主键优化,如分类科目表,采用有...

    基于SSM+FreeMarker搭建的Java后台工程模板+源代码+文档说明

    基于SSM搭建的Java后台模板(MyBatis相关代码引入mybatis-generator自动构建,只需要修改jdbc.properties中的数据库连接属性,在generatorConfig.xml中配置相应的table即可),可以直接下载使用。日志框架用的是...

    report 开源的访问层中间件,基于java平台

    a)自定义配置文件需采用指定资源地址:report/report-config.properties b)REPORT_SWITCH:true 则开启,反之关闭 默认开启 c)FILETER:自定义过滤器,多个以逗号隔开 d)JSON_BOAY:json数据请求方式key名称,默认为...

    goldfinch:类属性的详尽迭代

    金翅雀 Goldfinch生成kotlin... 要遍历Person的属性,可以使用生成的扩展属性Person#properties如下所示: val person = Person ( " Selim " , LocalDate .of( 1970 , 1 , 1 )) person.properties .forEach { prop

    OsmRealtimeStorage-Java:实时云存储的对象存储映射

    您只需要为每个表定义一个POJO,它必须扩展ActiveRecord类,并使用提供的注释对其进行配置。 完成此操作后,您的POJO将获得以下功能: 提取-从primaryKey和secondaryKey检索项目删除-删除项目保存-更新或创建项目...

    基于SpringMVC的一个web框架

    修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 zookeeper工具类优化 增加工具类 1.0.16 页面html标志修改 httpclient中文支持 工具类增强(zip,reflect,thread) 1.0.17 ...

    masspec-glue:从 code.google.compmasspec-glue 自动导出

    这个配置可能是一个 JSON 文档或一个“结构化属性”文档,它是配置文件的 .properties 样式的扩展。 建议使用 JSON,有关结构化属性方言的示例,请参阅tests/testConf.properties 。 这是 JSON 格式的示例配置...

    easy-retry:容易重试

    一种存储介质可扩展的持久化重试方案 Getting started Memory Retry 增加pom依赖 &lt;groupId&gt;com.alibaba&lt;/groupId&gt; &lt;artifactId&gt;easy-retry-memory-starter &lt;version&gt;1.0.0.RC3 在application.properties增加...

    t3apidemo:基于ext:t3api的ddev演示服务ext:news模型

    获取新闻列表 获取单个新闻 获取类别列表 获取按标题或按日期时间或进行多次订购排序仅通过注释进行配置。 您无需执行任何操作! * @T3api\ApiFilter(* OrderFilter::class,* properties={"uid","title","d

    springboot知识点整理

    2.4 properties配置文件乱码问题 24 2.5 @ConfigurationProperties与@Value的区别 25 2.6 配置@PropertySource、@ImportResource、@Bean 27 2.7 配置文件占位符 30 2.8 Profile多环境支持 31 2.9 配置文件的加载位置...

    基于Spring MVC的web框架 1.1.11

    修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 zookeeper工具类优化 增加工具类 1.0.16 页面html标志修改 httpclient中文支持 工具类增强(zip,reflect,thread) 1.0.17 ...

    玩转模板--自动代码生成工程

    自动从数据库中获取表名/表注释/列名/列注释/列类型等等相关信息 示例:由角色表生成domain对象 模版: package $!{package}.domain; import java.util.Date; /** * $!system * @author $!author * @...

Global site tag (gtag.js) - Google Analytics