public class AnnotationBean extends PropertyPlaceholderConfigurer implements BeanPostProcessor,InitializingBean{
private static transient Log logger=LogFactory.getLog(AnnotationBean .class);
private java.util.propertise pros;
@SuppressWarnings("unchecked")
private Class[] enableClassList={String.class};
@SuppressWarnings("unchecked")
public void setEnableClssList(Class[] enableClassList){
this.enableClassList=enableClassList;
}
public Object postProcessAfterInitialization(Object bean,String beanName) throws BeansException{
Field[] fields=bean.getClass().getDeclaredFields();
for(Field field:fields){
if(logger.isDebugEnabled()){
StringBuilder sb=new StringBuilder();
sb.append("=========");
.append(field.getType())
.append("=========")
.append(field.getName)
.append("=========")
.append(field.isAnnotionPresent(Properties.class));
logger.debug(sb.toString);
}
//TODO
if(field.isAnnotationPresent(Properties.class)){
if(filterType(field.getType().toString())){
Properties p=field.getAnnotation(Properties .class);
RefletionUtils.makeAccessible(field);
String pName;
if("".equals(p.name())){
pName=field.getName();
}else{
pName=p.name();
}
//中文转码
String propVal=pros.getProperty(pName);
String trans="";
if(propVal != null){
trans=new String(propVal.getByte("ISO-8859-1"),"UTF-8");
}
field.set(bean,trans);
}
}
}
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(Obejct bean,String beanName)throws BeansException{
return bean;
}
public void afterPropertiesSet()throws Exception{
pros=margeProperties();
}
}
applicationContext.xml文件中的配置代码:
<bean id="propertyConfig" class="xxx.xxx.AnnotationBean ">
<property name="order" value="1"/>
<property name="ignoreUnresolvblePlaceholders" value="true"/>
<property name="locations">
<list>
<value>classpath:xxxx.properties</value>
</list>
</property>
</bean>
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Properties{
String name() default "";
}
关于自定义注解在配置文件绑定的bean对象的属相上使用,
这种配置方式就是可以把配置文件映射成Java的bean对象。
一般常用的还有读取配置文件,用文件流的方式读取,网上讲解示例偏多。