diff --git a/cicada-base/pom.xml b/cicada-base/pom.xml index 570d008..2e7ce39 100644 --- a/cicada-base/pom.xml +++ b/cicada-base/pom.xml @@ -5,12 +5,12 @@ <parent> <artifactId>cicada</artifactId> <groupId>top.crossoverjie.opensource</groupId> - <version>2.0.1</version> + <version>2.0.2</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cicada-base</artifactId> - <version>1.0.1</version> + <version>1.0.2</version> <packaging>jar</packaging> diff --git a/cicada-base/src/main/java/top/crossoverjie/cicada/base/bean/CicadaBeanFactory.java b/cicada-base/src/main/java/top/crossoverjie/cicada/base/bean/CicadaBeanFactory.java index 76897b1..9e5c429 100644 --- a/cicada-base/src/main/java/top/crossoverjie/cicada/base/bean/CicadaBeanFactory.java +++ b/cicada-base/src/main/java/top/crossoverjie/cicada/base/bean/CicadaBeanFactory.java @@ -23,6 +23,15 @@ public interface CicadaBeanFactory { */ Object getBean(String name) throws Exception; + /** + * get bean by class type + * @param clazz + * @param <T> + * @return bean + * @throws Exception + */ + <T> T getBean(Class<T> clazz) throws Exception; + /** * release all beans */ diff --git a/cicada-core/pom.xml b/cicada-core/pom.xml index 65d4ad8..4309602 100644 --- a/cicada-core/pom.xml +++ b/cicada-core/pom.xml @@ -5,12 +5,12 @@ <parent> <artifactId>cicada</artifactId> <groupId>top.crossoverjie.opensource</groupId> - <version>2.0.1</version> + <version>2.0.2</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cicada-core</artifactId> - <version>2.0.1</version> + <version>2.0.2</version> <packaging>jar</packaging> <name>cicada-core</name> diff --git a/cicada-core/src/main/java/top/crossoverjie/cicada/server/action/req/CicadaHttpRequest.java b/cicada-core/src/main/java/top/crossoverjie/cicada/server/action/req/CicadaHttpRequest.java index abefb86..f3ffa39 100644 --- a/cicada-core/src/main/java/top/crossoverjie/cicada/server/action/req/CicadaHttpRequest.java +++ b/cicada-core/src/main/java/top/crossoverjie/cicada/server/action/req/CicadaHttpRequest.java @@ -35,7 +35,7 @@ public static CicadaHttpRequest init(DefaultHttpRequest httpRequest){ //build headers buildHeaders(httpRequest, request); - //init cookies + //initBean cookies initCookies(request); return request ; @@ -53,7 +53,7 @@ private static void buildHeaders(DefaultHttpRequest httpRequest, CicadaHttpReque } /** - * init cookies + * initBean cookies * @param request request */ private static void initCookies(CicadaHttpRequest request) { diff --git a/cicada-core/src/main/java/top/crossoverjie/cicada/server/annotation/CicadaBean.java b/cicada-core/src/main/java/top/crossoverjie/cicada/server/annotation/CicadaBean.java new file mode 100644 index 0000000..9fda42a --- /dev/null +++ b/cicada-core/src/main/java/top/crossoverjie/cicada/server/annotation/CicadaBean.java @@ -0,0 +1,12 @@ +package top.crossoverjie.cicada.server.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface CicadaBean { + + String value() default "" ; +} diff --git a/cicada-core/src/main/java/top/crossoverjie/cicada/server/bean/CicadaBeanManager.java b/cicada-core/src/main/java/top/crossoverjie/cicada/server/bean/CicadaBeanManager.java index 3ed3ab5..506899e 100644 --- a/cicada-core/src/main/java/top/crossoverjie/cicada/server/bean/CicadaBeanManager.java +++ b/cicada-core/src/main/java/top/crossoverjie/cicada/server/bean/CicadaBeanManager.java @@ -1,8 +1,10 @@ package top.crossoverjie.cicada.server.bean; +import org.slf4j.Logger; import top.crossoverjie.cicada.base.bean.CicadaBeanFactory; +import top.crossoverjie.cicada.base.log.LoggerBuilder; +import top.crossoverjie.cicada.server.exception.GlobalHandelException; import top.crossoverjie.cicada.server.reflect.ClassScanner; -import top.crossoverjie.cicada.server.route.RouteProcess; import java.util.Map; @@ -14,7 +16,7 @@ * @since JDK 1.8 */ public final class CicadaBeanManager { - + private final static Logger LOGGER = LoggerBuilder.getLogger(CicadaBeanManager.class); private CicadaBeanManager(){ } @@ -23,9 +25,11 @@ private CicadaBeanManager(){ private static CicadaBeanFactory cicadaBeanFactory ; + private GlobalHandelException handelException ; + public static CicadaBeanManager getInstance() { if (cicadaBeanManager == null) { - synchronized (RouteProcess.class) { + synchronized (CicadaBeanManager.class) { if (cicadaBeanManager == null) { cicadaBeanManager = new CicadaBeanManager(); } @@ -35,19 +39,25 @@ public static CicadaBeanManager getInstance() { } /** - * init route bean factory + * initBean route bean factory * @param packageName * @throws Exception */ - public void init(String packageName) throws Exception { - Map<String, Class<?>> cicadaAction = ClassScanner.getCicadaAction(packageName); + public void initBean(String packageName) throws Exception { + Map<String, Class<?>> cicadaBean = ClassScanner.getCicadaBean(packageName); Class<?> bean = ClassScanner.getCustomRouteBean(); cicadaBeanFactory = (CicadaBeanFactory) bean.newInstance() ; - for (Map.Entry<String, Class<?>> classEntry : cicadaAction.entrySet()) { + for (Map.Entry<String, Class<?>> classEntry : cicadaBean.entrySet()) { Object instance = classEntry.getValue().newInstance(); cicadaBeanFactory.register(instance) ; + + //set exception handle + if (ClassScanner.isInterface(classEntry.getValue(), GlobalHandelException.class)){ + GlobalHandelException exception = (GlobalHandelException) instance; + CicadaBeanManager.getInstance().exceptionHandle(exception); + } } } @@ -59,10 +69,30 @@ public void init(String packageName) throws Exception { * @return * @throws Exception */ - public Object getBean(String name) throws Exception { - return cicadaBeanFactory.getBean(name) ; + public Object getBean(String name) { + try { + return cicadaBeanFactory.getBean(name) ; + } catch (Exception e) { + LOGGER.error("get bean error",e); + } + return null ; } + /** + * + * @param clazz + * @param <T> + * @return + * @throws Exception + */ + public <T> T getBean(Class<T> clazz) { + try { + return cicadaBeanFactory.getBean(clazz) ; + } catch (Exception e) { + LOGGER.error("get bean error",e); + } + return null ; + } /** * release all beans @@ -70,4 +100,12 @@ public Object getBean(String name) throws Exception { public void releaseBean(){ cicadaBeanFactory.releaseBean(); } + + public void exceptionHandle(GlobalHandelException ex){ + handelException = ex ; + } + + public GlobalHandelException exceptionHandle(){ + return handelException ; + } } diff --git a/cicada-core/src/main/java/top/crossoverjie/cicada/server/bean/CicadaDefaultBean.java b/cicada-core/src/main/java/top/crossoverjie/cicada/server/bean/CicadaDefaultBean.java index 1bc6e26..f528fdb 100644 --- a/cicada-core/src/main/java/top/crossoverjie/cicada/server/bean/CicadaDefaultBean.java +++ b/cicada-core/src/main/java/top/crossoverjie/cicada/server/bean/CicadaDefaultBean.java @@ -22,6 +22,11 @@ public Object getBean(String name) throws Exception { return aClass.newInstance(); } + @Override + public <T> T getBean(Class<T> clazz) throws Exception { + return clazz.newInstance(); + } + @Override public void releaseBean() { } diff --git a/cicada-core/src/main/java/top/crossoverjie/cicada/server/config/CicadaSetting.java b/cicada-core/src/main/java/top/crossoverjie/cicada/server/config/CicadaSetting.java index adf4a2a..98c912f 100644 --- a/cicada-core/src/main/java/top/crossoverjie/cicada/server/config/CicadaSetting.java +++ b/cicada-core/src/main/java/top/crossoverjie/cicada/server/config/CicadaSetting.java @@ -45,8 +45,8 @@ public static void setting(Class<?> clazz, String rootPath) throws Exception { //Set application configuration setAppConfig(rootPath); - //init route bean factory - CicadaBeanManager.getInstance().init(rootPath); + //initBean route bean factory + CicadaBeanManager.getInstance().initBean(rootPath); } diff --git a/cicada-core/src/main/java/top/crossoverjie/cicada/server/exception/GlobalHandelException.java b/cicada-core/src/main/java/top/crossoverjie/cicada/server/exception/GlobalHandelException.java new file mode 100644 index 0000000..73542db --- /dev/null +++ b/cicada-core/src/main/java/top/crossoverjie/cicada/server/exception/GlobalHandelException.java @@ -0,0 +1,20 @@ +package top.crossoverjie.cicada.server.exception; + +import top.crossoverjie.cicada.server.context.CicadaContext; + +/** + * Function: global exception handle + * + * @author crossoverJie + * Date: 2019-07-10 17:12 + * @since JDK 1.8 + */ +public interface GlobalHandelException { + + /** + * exception handle + * @param context + * @param e + */ + void resolveException(CicadaContext context,Exception e) ; +} diff --git a/cicada-core/src/main/java/top/crossoverjie/cicada/server/handle/HttpDispatcher.java b/cicada-core/src/main/java/top/crossoverjie/cicada/server/handle/HttpDispatcher.java index c625b2a..3a72a4d 100644 --- a/cicada-core/src/main/java/top/crossoverjie/cicada/server/handle/HttpDispatcher.java +++ b/cicada-core/src/main/java/top/crossoverjie/cicada/server/handle/HttpDispatcher.java @@ -1,6 +1,5 @@ package top.crossoverjie.cicada.server.handle; -import com.alibaba.fastjson.JSON; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandler; @@ -8,7 +7,6 @@ import io.netty.channel.SimpleChannelInboundHandler; import io.netty.handler.codec.http.*; import io.netty.handler.codec.http.cookie.Cookie; -import io.netty.util.CharsetUtil; import org.slf4j.Logger; import top.crossoverjie.cicada.base.log.LoggerBuilder; import top.crossoverjie.cicada.server.action.param.Param; @@ -17,11 +15,12 @@ import top.crossoverjie.cicada.server.action.req.CicadaRequest; import top.crossoverjie.cicada.server.action.res.CicadaHttpResponse; import top.crossoverjie.cicada.server.action.res.CicadaResponse; -import top.crossoverjie.cicada.server.action.res.WorkRes; +import top.crossoverjie.cicada.server.bean.CicadaBeanManager; import top.crossoverjie.cicada.server.config.AppConfig; import top.crossoverjie.cicada.server.constant.CicadaConstant; import top.crossoverjie.cicada.server.context.CicadaContext; import top.crossoverjie.cicada.server.exception.CicadaException; +import top.crossoverjie.cicada.server.exception.GlobalHandelException; import top.crossoverjie.cicada.server.intercept.InterceptProcess; import top.crossoverjie.cicada.server.route.RouteProcess; import top.crossoverjie.cicada.server.route.RouterScanner; @@ -48,6 +47,9 @@ public final class HttpDispatcher extends SimpleChannelInboundHandler<DefaultHtt private final InterceptProcess interceptProcess = InterceptProcess.getInstance(); private final RouterScanner routerScanner = RouterScanner.getInstance(); private final RouteProcess routeProcess = RouteProcess.getInstance() ; + private final CicadaBeanManager cicadaBeanManager = CicadaBeanManager.getInstance() ; + private final GlobalHandelException exceptionHandle = cicadaBeanManager.exceptionHandle() ; + private Exception exception ; @Override public void channelRead0(ChannelHandlerContext ctx, DefaultHttpRequest httpRequest) { @@ -113,7 +115,6 @@ public void channelRead0(ChannelHandlerContext ctx, DefaultHttpRequest httpReque * @param ctx */ private void responseContent(ChannelHandlerContext ctx) { - CicadaResponse cicadaResponse = CicadaContext.getResponse(); String context = cicadaResponse.getHttpContent() ; @@ -145,20 +146,14 @@ private Param buildParamMap(QueryStringDecoder queryStringDecoder) { @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { - + exception = (Exception) cause; if (CicadaException.isResetByPeer(cause.getMessage())){ return; } - LOGGER.error(cause.getMessage(), cause); - - WorkRes workRes = new WorkRes(); - workRes.setCode(String.valueOf(HttpResponseStatus.NOT_FOUND.code())); - workRes.setMessage(cause.getMessage()); - - DefaultFullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.NOT_FOUND, Unpooled.copiedBuffer(JSON.toJSONString(workRes), CharsetUtil.UTF_8)); - buildHeader(response); - ctx.writeAndFlush(response); + if (exceptionHandle != null){ + exceptionHandle.resolveException(CicadaContext.getContext(),exception); + } } /** diff --git a/cicada-core/src/main/java/top/crossoverjie/cicada/server/reflect/ClassScanner.java b/cicada-core/src/main/java/top/crossoverjie/cicada/server/reflect/ClassScanner.java index f9b0d96..8563f2c 100644 --- a/cicada-core/src/main/java/top/crossoverjie/cicada/server/reflect/ClassScanner.java +++ b/cicada-core/src/main/java/top/crossoverjie/cicada/server/reflect/ClassScanner.java @@ -4,6 +4,7 @@ import top.crossoverjie.cicada.base.bean.CicadaBeanFactory; import top.crossoverjie.cicada.base.log.LoggerBuilder; import top.crossoverjie.cicada.server.annotation.CicadaAction; +import top.crossoverjie.cicada.server.annotation.CicadaBean; import top.crossoverjie.cicada.server.annotation.Interceptor; import top.crossoverjie.cicada.server.bean.CicadaDefaultBean; import top.crossoverjie.cicada.server.configuration.AbstractCicadaConfiguration; @@ -28,7 +29,7 @@ * Date: 2018/9/1 11:36 * @since JDK 1.8 */ -public class ClassScanner { +public final class ClassScanner { private final static Logger LOGGER = LoggerBuilder.getLogger(ClassScanner.class); @@ -74,13 +75,13 @@ public static List<Class<?>> getConfiguration(String packageName) throws Excepti return configurationList; } /** - * get @CicadaAction + * get @CicadaAction & @CicadaBean * * @param packageName * @return * @throws Exception */ - public static Map<String, Class<?>> getCicadaAction(String packageName) throws Exception { + public static Map<String, Class<?>> getCicadaBean(String packageName) throws Exception { if (actionMap == null) { Set<Class<?>> clsList = getClasses(packageName); @@ -92,19 +93,40 @@ public static Map<String, Class<?>> getCicadaAction(String packageName) throws E actionMap = new HashMap<>(16); for (Class<?> cls : clsList) { - Annotation annotation = cls.getAnnotation(CicadaAction.class); - if (annotation == null) { + CicadaAction action = cls.getAnnotation(CicadaAction.class); + CicadaBean bean = cls.getAnnotation(CicadaBean.class); + if (action == null && bean == null) { continue; } - CicadaAction cicadaAction = (CicadaAction) annotation; - actionMap.put(cicadaAction.value() == null ? cls.getName() : cicadaAction.value(), cls); + if (action != null){ + actionMap.put(action.value() == null ? cls.getName() : action.value(), cls); + } + + if (bean != null){ + actionMap.put(bean.value() == null ? cls.getName() : bean.value(), cls); + } } } return actionMap; } + /** + * whether is the target class + * @param clazz + * @param target + * @return + */ + public static boolean isInterface(Class<?> clazz,Class<?> target){ + for (Class<?> aClass : clazz.getInterfaces()) { + if (aClass.getName().equals(target.getName())){ + return true ; + } + } + return false ; + } + /** * get @Interceptor * diff --git a/cicada-core/src/test/java/top/crossoverjie/cicada/server/reflect/ScannerTest.java b/cicada-core/src/test/java/top/crossoverjie/cicada/server/reflect/ScannerTest.java index 36f3069..bbc3ea5 100644 --- a/cicada-core/src/test/java/top/crossoverjie/cicada/server/reflect/ScannerTest.java +++ b/cicada-core/src/test/java/top/crossoverjie/cicada/server/reflect/ScannerTest.java @@ -24,7 +24,7 @@ public void getClasses() throws Exception { @Test public void getActionAction() throws Exception{ - Map<String, Class<?>> cicadaAction = ClassScanner.getCicadaAction("top.crossoverjie.cicada.server"); + Map<String, Class<?>> cicadaAction = ClassScanner.getCicadaBean("top.crossoverjie.cicada.server"); LOGGER.info("classes=[{}]", JSON.toJSONString(cicadaAction)); } diff --git a/cicada-example/pom.xml b/cicada-example/pom.xml index 5dd8b93..6c5b6e5 100644 --- a/cicada-example/pom.xml +++ b/cicada-example/pom.xml @@ -5,10 +5,10 @@ <parent> <artifactId>cicada</artifactId> <groupId>top.crossoverjie.opensource</groupId> - <version>2.0.1</version> + <version>2.0.2</version> </parent> <modelVersion>4.0.0</modelVersion> - <version>2.0.1</version> + <version>2.0.2</version> <artifactId>cicada-example</artifactId> <packaging>jar</packaging> @@ -18,13 +18,13 @@ <dependency> <groupId>top.crossoverjie.opensource</groupId> <artifactId>cicada-core</artifactId> - <version>2.0.1</version> + <version>2.0.2</version> </dependency> <dependency> <groupId>top.crossoverjie.opensource</groupId> <artifactId>cicada-ioc</artifactId> - <version>2.0.1</version> + <version>2.0.2</version> </dependency> <dependency> diff --git a/cicada-example/src/main/java/top/crossoverjie/cicada/example/action/RouteAction.java b/cicada-example/src/main/java/top/crossoverjie/cicada/example/action/RouteAction.java index 7e1caef..fec0557 100644 --- a/cicada-example/src/main/java/top/crossoverjie/cicada/example/action/RouteAction.java +++ b/cicada-example/src/main/java/top/crossoverjie/cicada/example/action/RouteAction.java @@ -2,11 +2,13 @@ import org.slf4j.Logger; import top.crossoverjie.cicada.base.log.LoggerBuilder; +import top.crossoverjie.cicada.example.exception.ExceptionHandle; import top.crossoverjie.cicada.example.req.DemoReq; import top.crossoverjie.cicada.server.action.req.Cookie; import top.crossoverjie.cicada.server.action.res.WorkRes; import top.crossoverjie.cicada.server.annotation.CicadaAction; import top.crossoverjie.cicada.server.annotation.CicadaRoute; +import top.crossoverjie.cicada.server.bean.CicadaBeanManager; import top.crossoverjie.cicada.server.context.CicadaContext; /** @@ -61,5 +63,11 @@ public void getReq(CicadaContext context,DemoReq req){ } + @CicadaRoute("test") + public void test(CicadaContext context){ + ExceptionHandle bean = CicadaBeanManager.getInstance().getBean(ExceptionHandle.class); + LOGGER.info("====" +bean.getClass()); + context.html("<p>12345</p>"); + } } diff --git a/cicada-example/src/main/java/top/crossoverjie/cicada/example/exception/ExceptionHandle.java b/cicada-example/src/main/java/top/crossoverjie/cicada/example/exception/ExceptionHandle.java new file mode 100644 index 0000000..2bc538c --- /dev/null +++ b/cicada-example/src/main/java/top/crossoverjie/cicada/example/exception/ExceptionHandle.java @@ -0,0 +1,30 @@ +package top.crossoverjie.cicada.example.exception; + +import org.slf4j.Logger; +import top.crossoverjie.cicada.base.log.LoggerBuilder; +import top.crossoverjie.cicada.server.action.res.WorkRes; +import top.crossoverjie.cicada.server.annotation.CicadaBean; +import top.crossoverjie.cicada.server.context.CicadaContext; +import top.crossoverjie.cicada.server.exception.GlobalHandelException; + +/** + * Function: + * + * @author crossoverJie + * Date: 2019-07-11 12:07 + * @since JDK 1.8 + */ + +@CicadaBean +public class ExceptionHandle implements GlobalHandelException { + private final static Logger LOGGER = LoggerBuilder.getLogger(ExceptionHandle.class); + + @Override + public void resolveException(CicadaContext context, Exception e) { + LOGGER.error("Exception", e); + WorkRes workRes = new WorkRes(); + workRes.setCode("500"); + workRes.setMessage(e.getClass().getName()); + context.json(workRes); + } +} diff --git a/cicada-example/src/main/java/top/crossoverjie/cicada/example/intercept/ExecuteTimeInterceptor.java b/cicada-example/src/main/java/top/crossoverjie/cicada/example/intercept/ExecuteTimeInterceptor.java index 0b50fff..6f351d4 100644 --- a/cicada-example/src/main/java/top/crossoverjie/cicada/example/intercept/ExecuteTimeInterceptor.java +++ b/cicada-example/src/main/java/top/crossoverjie/cicada/example/intercept/ExecuteTimeInterceptor.java @@ -27,7 +27,6 @@ public class ExecuteTimeInterceptor extends CicadaInterceptor { public boolean before(CicadaContext context,Param param) { start = System.currentTimeMillis(); LOGGER.info("拦截请求"); - context.text("拦截请求"); return true; } diff --git a/cicada-example/src/main/java/top/crossoverjie/cicada/example/intercept/LoggerInterceptorAbstract.java b/cicada-example/src/main/java/top/crossoverjie/cicada/example/intercept/LoggerInterceptor.java similarity index 89% rename from cicada-example/src/main/java/top/crossoverjie/cicada/example/intercept/LoggerInterceptorAbstract.java rename to cicada-example/src/main/java/top/crossoverjie/cicada/example/intercept/LoggerInterceptor.java index 8388bdb..ded26ce 100644 --- a/cicada-example/src/main/java/top/crossoverjie/cicada/example/intercept/LoggerInterceptorAbstract.java +++ b/cicada-example/src/main/java/top/crossoverjie/cicada/example/intercept/LoggerInterceptor.java @@ -15,9 +15,9 @@ * @since JDK 1.8 */ @Interceptor(order = 1) -public class LoggerInterceptorAbstract extends CicadaInterceptor { +public class LoggerInterceptor extends CicadaInterceptor { - private static final Logger LOGGER = LoggerBuilder.getLogger(LoggerInterceptorAbstract.class) ; + private static final Logger LOGGER = LoggerBuilder.getLogger(LoggerInterceptor.class) ; @Override public boolean before(CicadaContext context, Param param) throws Exception { diff --git a/cicada-ioc/pom.xml b/cicada-ioc/pom.xml index 86ce33e..7d0c396 100644 --- a/cicada-ioc/pom.xml +++ b/cicada-ioc/pom.xml @@ -5,12 +5,12 @@ <parent> <artifactId>cicada</artifactId> <groupId>top.crossoverjie.opensource</groupId> - <version>2.0.1</version> + <version>2.0.2</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cicada-ioc</artifactId> - <version>2.0.1</version> + <version>2.0.2</version> <packaging>jar</packaging> diff --git a/cicada-ioc/src/main/java/top/crossoverjie/cicada/bean/ioc/CicadaIoc.java b/cicada-ioc/src/main/java/top/crossoverjie/cicada/bean/ioc/CicadaIoc.java index 6721bba..9160b69 100644 --- a/cicada-ioc/src/main/java/top/crossoverjie/cicada/bean/ioc/CicadaIoc.java +++ b/cicada-ioc/src/main/java/top/crossoverjie/cicada/bean/ioc/CicadaIoc.java @@ -30,6 +30,11 @@ public Object getBean(String name) { return beans.get(name); } + @Override + public <T> T getBean(Class<T> clazz) { + return (T) getBean(clazz.getName()); + } + @Override public void releaseBean() { beans = null ; diff --git a/pom.xml b/pom.xml index a905ffe..a3207fd 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ <groupId>top.crossoverjie.opensource</groupId> <artifactId>cicada</artifactId> <packaging>pom</packaging> - <version>2.0.1</version> + <version>2.0.2</version> <name>cicada</name> <description>Fast, lightweight Web framework based on Netty</description> @@ -101,7 +101,7 @@ <dependency> <groupId>top.crossoverjie.opensource</groupId> <artifactId>cicada-base</artifactId> - <version>1.0.1</version> + <version>1.0.2</version> </dependency> </dependencies> </dependencyManagement>