博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java简单框架设计
阅读量:5290 次
发布时间:2019-06-14

本文共 4868 字,大约阅读时间需要 16 分钟。

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

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

 

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

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

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

 

注解类:

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
nodeMap = new HashMap
(); 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
nodeMap = new HashMap
(); 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; } }

二、jar包配置使用方式

1、maven依赖

com.jd.app.server
desk-conf
1.0.0-SNAPSHOT

2、配置项注入样例

/**  *  */ public class TimeConstants extends ConfRegister{
@DeskConf("online") private static String comp = ""; }

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

4、使用说明

@Autowired ConfService confService;

读取监控信息

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

读取模块名称

String com = confService.getComponent();
 

转载于:https://www.cnblogs.com/freedommovie/p/9803754.html

你可能感兴趣的文章
喝酒游戏,概率分布和卷积
查看>>
用matlab查找txt文档中的关键字,并把关键字后面的数据存到起来用matlab处理
查看>>
Grow A Search Result Specification Update
查看>>
《CSS3秘籍》(第三版)-读书笔记(2)
查看>>
Chrome使用记录
查看>>
[LeetCode] Move Zeroes
查看>>
SharePoint添加列表
查看>>
update 两表更新(mysql)
查看>>
C# Math类详细说明
查看>>
【转】使用TCP协议连续传输大量数据时,是否会丢包,应如何避免?
查看>>
阿姆达尔定律
查看>>
HDU1115--Lifting the Stone(求凸多边形的重心)
查看>>
快速导航
查看>>
怎样快速导入数据到oracle数据库中
查看>>
hihoCoder 1388 Periodic Signal(FFT)
查看>>
第五周工作总结
查看>>
FileChannel的基本使用
查看>>
第三章上机实践报告
查看>>
INTERVAL YEAR TO MONTH数据类型
查看>>
Sprint总结
查看>>