Browse Source

Controller 的依赖注入挪到 ControllerFactory

James 5 years ago
parent
commit
fdaf0df3bf

+ 2 - 0
src/main/java/com/jfinal/config/Constants.java

@@ -197,6 +197,7 @@ final public class Constants {
 	}
 	
 	public ControllerFactory getControllerFactory() {
+		controllerFactory.setInjectDependency(getInjectDependency());
 		return controllerFactory;
 	}
 	
@@ -211,6 +212,7 @@ final public class Constants {
 	 */
 	public void setInjectDependency(boolean injectDependency) {
 		AopManager.me().setInjectDependency(injectDependency);
+		controllerFactory.setInjectDependency(injectDependency);
 	}
 	
 	public boolean getInjectDependency() {

+ 0 - 3
src/main/java/com/jfinal/core/ActionHandler.java

@@ -33,7 +33,6 @@ import com.jfinal.render.RenderManager;
 public class ActionHandler extends Handler {
 	
 	protected boolean devMode;
-	protected boolean injectDependency;
 	protected ActionMapping actionMapping;
 	protected ControllerFactory controllerFactory;
 	protected static final RenderManager renderManager = RenderManager.me();
@@ -42,7 +41,6 @@ public class ActionHandler extends Handler {
 	protected void init(ActionMapping actionMapping, Constants constants) {
 		this.actionMapping = actionMapping;
 		this.devMode = constants.getDevMode();
-		this.injectDependency = constants.getInjectDependency();
 		this.controllerFactory = constants.getControllerFactory();
 	}
 	
@@ -81,7 +79,6 @@ public class ActionHandler extends Handler {
 		try {
 			// Controller controller = action.getControllerClass().newInstance();
 			controller = controllerFactory.getController(action.getControllerClass());
-			if (injectDependency) {com.jfinal.aop.Aop.inject(controller);}
 			controller._init_(action, request, response, urlPara[0]);
 			
 			if (devMode) {

+ 15 - 1
src/main/java/com/jfinal/core/ControllerFactory.java

@@ -21,8 +21,22 @@ package com.jfinal.core;
  */
 public class ControllerFactory {
 	
+	protected boolean injectDependency = false;
+	
+	public void setInjectDependency(boolean injectDependency) {
+		this.injectDependency = injectDependency;
+	}
+	
+	public boolean isInjectDependency() {
+		return injectDependency;
+	}
+	
 	public Controller getController(Class<? extends Controller> controllerClass) throws ReflectiveOperationException {
-		return controllerClass.newInstance();
+		Controller ret = controllerClass.newInstance();
+		if (injectDependency) {
+			com.jfinal.aop.Aop.inject(ret);
+		}
+		return ret;
 	}
 	
 	/**

+ 6 - 0
src/main/java/com/jfinal/core/FastControllerFactory.java

@@ -36,6 +36,8 @@ import java.util.Map;
  *          this.xxx = null;		// 清除本类中声明的属性的值
  *      }
  *      
+ *  警告:Controller 使用 @Inject 注入的依赖,只会在 Controller 被创建时注入一次
+ *       所以,被注入的依赖需要能被反复使用,否则不能使用 FastControllerFactory
  */
 public class FastControllerFactory extends ControllerFactory {
 	
@@ -49,6 +51,10 @@ public class FastControllerFactory extends ControllerFactory {
 		Controller ret = buffers.get().get(controllerClass);
 		if (ret == null) {
 			ret = controllerClass.newInstance();
+			if (injectDependency) {
+				com.jfinal.aop.Aop.inject(ret);
+			}
+			
 			buffers.get().put(controllerClass, ret);
 		}
 		return ret;