前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java简单框架设计

java简单框架设计

作者头像
杉枫
发布2018-10-25 14:45:37
8760
发布2018-10-25 14:45:37
举报
文章被收录于专栏:互联网研发闲思录

     设计框架包可以作为一个工具给大家用,需要有完全不同设计思路给出来,不同于我们去做一个web服务、网站、

或者一个业务微服务,需要从原来使用视角转换成一个构建者视角。

     框架或者工具,更多是框架来管理或者说调用我们,我们来遵循框架原则来实现,框架和业务实现上的核心差异。

     java框架,可以依赖注解以及抽象类来实现逻辑,实现基于注解配置,通过注解简化配置方式。子类实现抽象类,

子类中的注解对象可以用过反射方式在框架中被调用,从而实现一个简单的框架。  

注解类:

代码语言:javascript
复制
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();
}
抽象类:
代码语言:javascript
复制
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();
}
解析工具:
代码语言:javascript
复制
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;
    }

}

使用样例:
代码语言:javascript
复制
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;
    }

}

接口:
代码语言:javascript
复制
public interface ConfService {

    /**
     * 获取配置信息
     * @param name 项目名称.
     * @param key key名称.
     * @return
     */
    String getConf(String name,String key);

    /**
     * 获得所属模块.
     * @return
     */
    String  getComponent();
}
代码语言:javascript
复制
实现类:
代码语言:javascript
复制
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;
    }


}

二、jar包配置使用方式

1、maven依赖

代码语言:javascript
复制
<dependency>
   <groupId>com.jd.app.server</groupId>
   <artifactId>desk-conf</artifactId>
   <version>1.0.0-SNAPSHOT</version>
</dependency>

2、配置项注入样例

代码语言:javascript
复制
/**
 * 
 */
public class TimeConstants extends ConfRegister{

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

}

3、spring-config.xml 主配置文件中配置

代码语言:javascript
复制
<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>

4、使用说明

代码语言:javascript
复制
@Autowired
ConfService confService;

读取监控信息

代码语言:javascript
复制
String value = confService.getConf("findgood","down");

读取模块名称

代码语言:javascript
复制
String com = confService.getComponent();
代码语言:javascript
复制

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px ".AppleSystemUIFont"; color: #040404 } span.s1 { font: 14.0px ".PingFang SC" } div.d1 { width: 474.0px; margin: 15.0px 0.0px 0.0px 15.0px }

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档