java 简单 框架_java简单框架设计
設(shè)計(jì)框架包可以作為一個(gè)工具給大家用,需要有完全不同設(shè)計(jì)思路給出來,不同于我們?nèi)プ鲆粋€(gè)web服務(wù)、網(wǎng)站、
或者一個(gè)業(yè)務(wù)微服務(wù),需要從原來使用視角轉(zhuǎn)換成一個(gè)構(gòu)建者視角。
框架或者工具,更多是框架來管理或者說調(diào)用我們,我們來遵循框架原則來實(shí)現(xiàn),框架和業(yè)務(wù)實(shí)現(xiàn)上的核心差異。
java框架,可以依賴注解以及抽象類來實(shí)現(xiàn)邏輯,實(shí)現(xiàn)基于注解配置,通過注解簡化配置方式。子類實(shí)現(xiàn)抽象類,
子類中的注解對象可以用過反射方式在框架中被調(diào)用,從而實(shí)現(xiàn)一個(gè)簡單的框架。
注解類:
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 統(tǒng)一配置注冊中心必須被繼承實(shí)現(xiàn)");
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 統(tǒng)一配置注冊中心必須被繼承實(shí)現(xiàn)");
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 項(xiàng)目名稱.
* @param key key名稱.
* @return
*/
String getConf(String name,String key);
/**
* 獲得所屬模塊.
* @return
*/
String getComponent();
}
實(shí)現(xiàn)類:
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();
}
/**
* 獲取配置項(xiàng)信息
* @param name 項(xiàng)目名稱.
* @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、配置項(xiàng)注入樣例
/**
*
*/
public class TimeConstants extends ConfRegister{
@DeskConf("online")
private static String comp = "";
}
3、spring-config.xml 主配置文件中配置
4、使用說明
@Autowired
ConfService confService;
讀取監(jiān)控信息
String value = confService.getConf("findgood","down");
讀取模塊名稱
String com = confService.getComponent();
Getty – Java NIO 框架設(shè)計(jì)與實(shí)現(xiàn)
前言 Getty是我為了學(xué)習(xí) Java NIO 所寫的一個(gè) NIO 框架,實(shí)現(xiàn)過程中參考了 Netty 的設(shè)計(jì),同時(shí)使用 Groovy 來實(shí)現(xiàn).雖然只是玩具,但是麻雀雖小,五臟俱全,在實(shí)現(xiàn)過程中,不僅 ...
Java+Selenium3框架設(shè)計(jì)篇5-如何實(shí)現(xiàn)郵件發(fā)送測試報(bào)告
https://blog.csdn.net/u011541946/article/details/77278837 本篇繼續(xù)回答網(wǎng)友的問題,這個(gè)主題是如何通過郵件發(fā)送測試報(bào)告.通過郵件發(fā)送測試報(bào)告,這 ...
java 簡單框架的運(yùn)用
Struts Struts是一個(gè)基于Sun J2EE平臺的MVC框架,主要是采用Servlet和JSP技術(shù)來實(shí)現(xiàn)的. Struts框架可分為以下四個(gè)主要部分,其中三個(gè)就和MVC模式緊密相關(guān):? 1.模 ...
Java簡單購物車設(shè)計(jì)
還是存在一些問題(比如clear函數(shù)沒效果.亂碼,單獨(dú)測試也沒,確實(shí)找不到問題),路過的給解決下... 第一部分???? 會(huì)話控制 會(huì)話跟蹤: 使用隱藏表單字段 URL重寫,實(shí)際就是直 ...
Selenium2(java)框架設(shè)計(jì) 九
設(shè)計(jì)框架原則: 數(shù)據(jù)分離,業(yè)務(wù)層和邏輯層不要混雜在一起. 設(shè)計(jì)圖: 框架結(jié)構(gòu)初始化: com.wymall.test:這是存放這個(gè)框架源代碼的根目錄 base:里面有個(gè)基類(BaseParpaare. ...
Java異常框架設(shè)計(jì)
什么是異常? 異常(exception)應(yīng)該是異常事件(exceptional event)的縮寫.異常定義:異常是一個(gè)在程序執(zhí)行期間發(fā)生的事件,它中斷正在執(zhí)行的程序的正常的指令流.當(dāng)在一個(gè)方法中發(fā)生 ...
[轉(zhuǎn)]輕量級 Java Web 框架架構(gòu)設(shè)計(jì)
工作閑暇之余,我想設(shè)計(jì)并開發(fā)一款輕量級 Java Web 框架,看看能否取代目前最為流行的而又越來越重的 Spring.Hibernate 等框架.請?jiān)徳谙碌拇竽懶袨榕c不自量力,本人不是為了重造輪子 ...
Fork/Join 框架-設(shè)計(jì)與實(shí)現(xiàn)(翻譯自論文《A Java Fork/Join Framework》原作者 Doug Lea)
作者簡介 Dong Lea任職于紐約州立大學(xué)奧斯威戈分校(State University of New York at Oswego),他發(fā)布了第一個(gè)廣泛使用的java collections框架實(shí) ...
基于Java Mina框架的部標(biāo)jt808服務(wù)器設(shè)計(jì)和開發(fā)
在開發(fā)部標(biāo)GPS平臺中,部標(biāo)jt808GPS服務(wù)器是系統(tǒng)的核心關(guān)鍵,決定了部標(biāo)平臺的穩(wěn)定性和行那個(gè).Linux服務(wù)器是首選,為了跨平臺,開發(fā)語言選擇Java自不待言.需要購買jt808GPS服務(wù)器源碼 ...
隨機(jī)推薦
code
using System;using System.Threading; namespace ThreadLocalTest{?? ?public class MyObject?? ?{?? ??? ...
父類div高度適應(yīng)子類div
父類div高度適應(yīng)子類div 通常有許多div的高度由子類的高度決定父類的高度,所以需要父類div要適應(yīng)子類div的高度,一般情況父類的高度可以直接設(shè)置成“auto”即可. 在有的情況下,子類div會(huì) ...
UIWebView如何獲取內(nèi)容高度
iOS UIWebView如何獲取到內(nèi)容的高度呢?我們經(jīng)常會(huì)遇到項(xiàng)目中需要使用UIWebView來加載H5頁面,但是頁面的高度并不確定,而我們前端需要根據(jù)內(nèi)容的高度呈現(xiàn)出來,且不允許webview滾動(dòng) ...
在ThinkPHP3.x框架中實(shí)現(xiàn)將原創(chuàng)文章第一時(shí)間推送到百度收錄
前兩天自己寫的一篇文章“針對BootStrap中tabs控件的美化和完善”被別的網(wǎng)站給轉(zhuǎn)載了,這也許是值得高興的一件事情,但是有些網(wǎng)站并沒有注明來源和作者.而去百度搜索這篇文章,排名第一的居然是那些轉(zhuǎn) ...
在TextView使用部分顏色文字
/** * change a part of string color. * * @param string * whole string. * @param subString * the sub ...
HDU_2029——回文串的判斷
Problem Description “回文串”是一個(gè)正讀和反讀都一樣的字符串,比如“l(fā)evel”或者“noon”等等就是回文串.請寫一個(gè)程序判斷讀入的字符串是否是“回文”. ? Input 輸入包 ...
CCNP路由實(shí)驗(yàn)(2) -- OSPF
OSPF作為一種內(nèi)部網(wǎng)關(guān)協(xié)議(IGP),用于在同一個(gè)AS中的路由器之間交換路由信息.OSPF的特性如下:1.可適應(yīng)大規(guī)模網(wǎng)絡(luò)2.收斂速度快3.無路由環(huán)路4.支持VLSM和CIDR5.支持等價(jià)路由6.支 ...
Tomcat7安裝(linux環(huán)境)
1.獲取安裝包 如果沒有tomcat,則創(chuàng)建之,并下載二進(jìn)制文件到該目錄,如下: mkdir /opt/tomcat cd /opt/tomcat wget http://mirrors.hust.e ...
動(dòng)態(tài)修改屬性設(shè)置 easyUI
if(條件){? $("#area").combobox({ required:false }); }else{ $("#area").combobox({ r ...
Go中error類型的nil值和nil
https://my.oschina.net/chai2010/blog/117923
總結(jié)
以上是生活随笔為你收集整理的java 简单 框架_java简单框架设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu解压安装包及make命令相关
- 下一篇: 苹果手机防盗软件_苹果手机更好用的笔记软