java簡單框架設計

     設計框架包能夠做爲一個工具給你們用,須要有徹底不一樣設計思路給出來,不一樣於咱們去作一個web服務、網站、java

或者一個業務微服務,須要從原來使用視角轉換成一個構建者視角。node

 

     框架或者工具,更可能是框架來管理或者說調用咱們,咱們來遵循框架原則來實現,框架和業務實現上的核心差別。web

     java框架,能夠依賴註解以及抽象類來實現邏輯,實現基於註解配置,經過註解簡化配置方式。子類實現抽象類,spring

子類中的註解對象能夠用過反射方式在框架中被調用,從而實現一個簡單的框架。  apache

 

註解類:app

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//註解配置信息字段.
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DeskConf {

String getComponent() default "";

String value();
}
抽象類:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//註解配置信息字段.
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DeskConf {

String getComponent() default "";

String value();
}
解析工具:
import org.apache.log4j.Logger;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

/**
* 讀取註解信息
*/
public class ConfigAnnotationParse {
protected Logger logger = Logger.getLogger(ConfigAnnotationParse.class);
private ConfRegister configRegister;

public ConfigAnnotationParse(ConfRegister configCenter) {
this.configRegister = configCenter;
}



public DeskConf parseNodeAnnotation() throws Exception {
if (configRegister == null)
throw new ExceptionInInitializerError("ConfigRegister 統一配置註冊中心必須被繼承實現");
Class clazz = configRegister.getClass();
Map<String,String> nodeMap = new HashMap<String,String>();
DeskConf deskConf = null;
Field[] fields = clazz.getDeclaredFields();
for(Field field : fields) {
if (field.isAnnotationPresent(DeskConf.class)) {
deskConf = field.getAnnotation(DeskConf.class);
}
}
return deskConf;
}

}

使用樣例:
import org.apache.log4j.Logger;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

/**
* 讀取註解信息
*/
public class ConfigAnnotationParse {
protected Logger logger = Logger.getLogger(ConfigAnnotationParse.class);
private ConfRegister configRegister;

public ConfigAnnotationParse(ConfRegister configCenter) {
this.configRegister = configCenter;
}



public DeskConf parseNodeAnnotation() throws Exception {
if (configRegister == null)
throw new ExceptionInInitializerError("ConfigRegister 統一配置註冊中心必須被繼承實現");
Class clazz = configRegister.getClass();
Map<String,String> nodeMap = new HashMap<String,String>();
DeskConf deskConf = null;
Field[] fields = clazz.getDeclaredFields();
for(Field field : fields) {
if (field.isAnnotationPresent(DeskConf.class)) {
deskConf = field.getAnnotation(DeskConf.class);
}
}
return deskConf;
}

}

接口:
public interface ConfService {

/**
* 獲取配置信息
* @param name 項目名稱.
* @param key key名稱.
* @return
*/
String getConf(String name,String key);

/**
* 得到所屬模塊.
* @return
*/
String getComponent();
}


實現類:
public class ConfServiceImpl implements ConfService {
private ConfRegister myConfRegister;
private DeskConf deskConf;

/**
*
* @param confRegister
* @throws Exception
*/
public ConfServiceImpl(ConfRegister confRegister) throws Exception {
this.myConfRegister = confRegister;
ConfigAnnotationParse configAnnotationParse = new ConfigAnnotationParse(myConfRegister);
deskConf = configAnnotationParse.parseNodeAnnotation();
}

/**
* 獲取配置項信息
* @param name 項目名稱.
* @param key key名稱.
* @return
*/
public String getConf(String name, String key) {
if(deskConf==null)
return null;

String component = deskConf.getComponent();
Conf conf = new Conf();
conf.setComponent(component);
conf.setName(name);
conf.setKey(key);

String value = DBConf.getValue(conf);

return value;
}


/**
* 得到所屬模塊.
* @return
*/
public String getComponent() {
if(deskConf==null)
return null;

String component = deskConf.value();

return component;
}


}

2、jar包配置使用方式框架

一、maven依賴maven

<dependency>
<groupId>com.jd.app.server</groupId>
<artifactId>desk-conf</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>

二、配置項注入樣例微服務

/**
*
*/
public class TimeConstants extends ConfRegister{

@DeskConf("online")
private static String comp = "";

}

三、spring-config.xml 主配置文件中配置工具

<bean id="timeConstants" class="com.common.constant.TimeConstants"></bean>
<bean id="confService" class="com.jd.app.server.service.impl.ConfServiceImpl">
<constructor-arg index="0" ref="timeConstants"/>
</bean>

四、使用說明

@Autowired
ConfService confService;

讀取監控信息

String value = confService.getConf("findgood","down");

讀取模塊名稱

String com = confService.getComponent();
相關文章
相關標籤/搜索