Selaa lähdekoodia

加入了 Guice, 实现 IoC,架构更清晰

zhzhenqin 8 vuotta sitten
vanhempi
commit
de81a8dfea

+ 6 - 0
pom.xml

@@ -18,6 +18,12 @@
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>com.google.inject</groupId>
+            <artifactId>guice</artifactId>
+            <version>4.1.0</version>
+        </dependency>
+
         <dependency>
             <groupId>joda-time</groupId>
             <artifactId>joda-time</artifactId>

+ 18 - 9
src/main/java/com/yiidata/katta/ui/Booster.java

@@ -2,9 +2,11 @@ package com.yiidata.katta.ui;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Throwables;
+import com.google.inject.*;
 import com.yiidata.katta.ui.annaotion.Action;
 import com.yiidata.katta.ui.annaotion.Path;
 import com.yiidata.katta.ui.handle.DynamicRequestServlet;
+import com.yiidata.katta.ui.service.SimpleConfiguration;
 import com.yiidata.katta.ui.utils.ClasspathPackageScanner;
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.handler.ContextHandler;
@@ -12,14 +14,12 @@ import org.mortbay.jetty.handler.ResourceHandler;
 import org.mortbay.jetty.nio.SelectChannelConnector;
 import org.mortbay.jetty.servlet.ServletHandler;
 import org.mortbay.jetty.servlet.ServletHolder;
-import org.mortbay.resource.JarResource;
 import org.mortbay.resource.Resource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.lang.reflect.Method;
-import java.net.URI;
 import java.net.URL;
 import java.util.List;
 
@@ -37,7 +37,8 @@ import java.util.List;
  *
  * @author zhenqin
  */
-public class Booster {
+public class Booster implements Module {
+
 
     static Logger LOG = LoggerFactory.getLogger(Booster.class);
 
@@ -73,12 +74,10 @@ public class Booster {
     }
 
 
-    public String getHost() {
-        return host;
-    }
 
-    public int getPort() {
-        return port;
+    @Override
+    public void configure(Binder binder) {
+        binder.bind(SimpleConfiguration.class).in(Scopes.SINGLETON);
     }
 
     public void start() {
@@ -115,6 +114,7 @@ public class Booster {
             contextHandler.setHandler(resourceHandler);
             srv.addHandler(contextHandler);
 
+            Injector injector = Guice.createInjector(this);
 
             ServletHandler handler = new ServletHandler();
             LOG.info("add rule: /");
@@ -128,7 +128,9 @@ public class Booster {
                 }
 
                 // 是 Action 类,需要增加
-                Object instance = aClass.newInstance();
+                //Object instance = aClass.newInstance();
+                LOG.info("add class " + s);
+                Object instance = injector.getInstance(aClass);
                 Method[] methods = aClass.getDeclaredMethods();
                 for (Method method : methods) {
                     Path annotation1 = method.getAnnotation(Path.class);
@@ -180,6 +182,13 @@ public class Booster {
         srv.join();
     }
 
+    public String getHost() {
+        return host;
+    }
+
+    public int getPort() {
+        return port;
+    }
 
 
     public static void main(String[] args) throws Exception {

+ 16 - 0
src/main/java/com/yiidata/katta/ui/controller/IndexController.java

@@ -1,7 +1,9 @@
 package com.yiidata.katta.ui.controller;
 
+import com.google.inject.Inject;
 import com.yiidata.katta.ui.annaotion.Action;
 import com.yiidata.katta.ui.annaotion.Path;
+import com.yiidata.katta.ui.service.SimpleService;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -25,6 +27,20 @@ import java.util.Map;
 @Action
 public class IndexController {
 
+
+
+    protected SimpleService simpleService;
+
+
+    /**
+     * 使用 Inject 可以自动注入 simpleService 对象
+     * @param simpleService
+     */
+    @Inject
+    public IndexController(SimpleService simpleService) {
+        this.simpleService = simpleService;
+    }
+
     @Path("/")
     public String rootIndex(Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) {
         return index(params, request, response);

+ 18 - 0
src/main/java/com/yiidata/katta/ui/service/SimpleConfiguration.java

@@ -0,0 +1,18 @@
+package com.yiidata.katta.ui.service;
+
+/**
+ * <pre>
+ *
+ * Created by zhenqin.
+ * User: zhenqin
+ * Date: 2017/12/30
+ * Time: 18:55
+ * Verdor: NowledgeData
+ * To change this template use File | Settings | File Templates.
+ *
+ * </pre>
+ *
+ * @author zhenqin
+ */
+public class SimpleConfiguration {
+}

+ 18 - 0
src/main/java/com/yiidata/katta/ui/service/SimpleService.java

@@ -0,0 +1,18 @@
+package com.yiidata.katta.ui.service;
+
+/**
+ * <pre>
+ *
+ * Created by zhenqin.
+ * User: zhenqin
+ * Date: 2017/12/30
+ * Time: 18:53
+ * Verdor: NowledgeData
+ * To change this template use File | Settings | File Templates.
+ *
+ * </pre>
+ *
+ * @author zhenqin
+ */
+public class SimpleService {
+}

+ 14 - 1
src/main/resources/templates/index.ftl

@@ -61,7 +61,20 @@
     },
     methods:{
       openJson: function(){
-        window.location.href="/hi?name=" + app.name;
+        //window.location.href="/hi?name=" + app.name;
+        $.ajax({
+          type:"POST",
+          url:"/hi?name=" + app.name,
+          dataType:"json",
+          data: {
+
+          },
+          success: function (data) {
+            if(data.success) {
+              app.name = data.message;
+            }
+          }
+        })
       }
     }
   });