java 简单 框架_java简单框架设计

设计框架包可以作为一个工具给大家用,需要有完全不同设计思路给出来,不同于我们去做一个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();

Getty – Java NIO 框架设计与实现

前言 Getty是我为了学习 Java NIO 所写的一个 NIO 框架,实现过程中参考了 Netty 的设计,同时使用 Groovy 来实现.虽然只是玩具,但是麻雀虽小,五脏俱全,在实现过程中,不仅 ...

Java+Selenium3框架设计篇5-如何实现邮件发送测试报告

https://blog.csdn.net/u011541946/article/details/77278837 本篇继续回答网友的问题,这个主题是如何通过邮件发送测试报告.通过邮件发送测试报告,这 ...

java 简单框架的运用

Struts Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的. Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关:  1.模 ...

Java简单购物车设计

还是存在一些问题(比如clear函数没效果.乱码,单独测试也没,确实找不到问题),路过的给解决下... 第一部分     会话控制 会话跟踪: 使用隐藏表单字段 URL重写,实际就是直 ...

Selenium2(java)框架设计 九

设计框架原则: 数据分离,业务层和逻辑层不要混杂在一起. 设计图: 框架结构初始化: com.wymall.test:这是存放这个框架源代码的根目录 base:里面有个基类(BaseParpaare. ...

Java异常框架设计

什么是异常? 异常(exception)应该是异常事件(exceptional event)的缩写.异常定义:异常是一个在程序执行期间发生的事件,它中断正在执行的程序的正常的指令流.当在一个方法中发生 ...

[转]轻量级 Java Web 框架架构设计

工作闲暇之余,我想设计并开发一款轻量级 Java Web 框架,看看能否取代目前最为流行的而又越来越重的 Spring.Hibernate 等框架.请原谅在下的大胆行为与不自量力,本人不是为了重造轮子 ...

Fork/Join 框架-设计与实现(翻译自论文《A Java Fork/Join Framework》原作者 Doug Lea)

作者简介 Dong Lea任职于纽约州立大学奥斯威戈分校(State University of New York at Oswego),他发布了第一个广泛使用的java collections框架实 ...

基于Java Mina框架的部标jt808服务器设计和开发

在开发部标GPS平台中,部标jt808GPS服务器是系统的核心关键,决定了部标平台的稳定性和行那个.Linux服务器是首选,为了跨平台,开发语言选择Java自不待言.需要购买jt808GPS服务器源码 ...

随机推荐

code

using System;using System.Threading; namespace ThreadLocalTest{    public class MyObject    {       ...

父类div高度适应子类div

父类div高度适应子类div 通常有许多div的高度由子类的高度决定父类的高度,所以需要父类div要适应子类div的高度,一般情况父类的高度可以直接设置成“auto”即可. 在有的情况下,子类div会 ...

UIWebView如何获取内容高度

iOS UIWebView如何获取到内容的高度呢?我们经常会遇到项目中需要使用UIWebView来加载H5页面,但是页面的高度并不确定,而我们前端需要根据内容的高度呈现出来,且不允许webview滚动 ...

在ThinkPHP3.x框架中实现将原创文章第一时间推送到百度收录

前两天自己写的一篇文章“针对BootStrap中tabs控件的美化和完善”被别的网站给转载了,这也许是值得高兴的一件事情,但是有些网站并没有注明来源和作者.而去百度搜索这篇文章,排名第一的居然是那些转 ...

在TextView使用部分颜色文字

/** * change a part of string color. * * @param string * whole string. * @param subString * the sub ...

HDU_2029——回文串的判断

Problem Description “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串.请写一个程序判断读入的字符串是否是“回文”.   Input 输入包 ...

CCNP路由实验(2) -- OSPF

OSPF作为一种内部网关协议(IGP),用于在同一个AS中的路由器之间交换路由信息.OSPF的特性如下:1.可适应大规模网络2.收敛速度快3.无路由环路4.支持VLSM和CIDR5.支持等价路由6.支 ...

Tomcat7安装(linux环境)

1.获取安装包 如果没有tomcat,则创建之,并下载二进制文件到该目录,如下: mkdir /opt/tomcat cd /opt/tomcat wget http://mirrors.hust.e ...

动态修改属性设置 easyUI

if(条件){  $("#area").combobox({ required:false }); }else{ $("#area").combobox({ r ...

Go中error类型的nil值和nil

https://my.oschina.net/chai2010/blog/117923

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值