扩展 properties 注解

本文介绍了一种通过自定义注解实现属性注入的方法。该方法包括创建注解、设计注解处理类并实现BeanPostProcessor接口,以及如何在Spring配置文件中配置和使用该注解。此方案适用于特定类型的属性注入场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值