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
總結
以上是生活随笔為你收集整理的java 简单 框架_java简单框架设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu解压安装包及make命令相关
- 下一篇: 苹果手机防盗软件_苹果手机更好用的笔记软