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>