浏览代码

jfinal 3.7

James 6 年之前
父节点
当前提交
ad992bb697
共有 2 个文件被更改,包括 35 次插入0 次删除
  1. 11 0
      src/main/java/com/jfinal/aop/Aop.java
  2. 24 0
      src/main/java/com/jfinal/aop/AopFactory.java

+ 11 - 0
src/main/java/com/jfinal/aop/Aop.java

@@ -225,6 +225,17 @@ public class Aop {
 	public static boolean isSingleton() {
 		return aopFactory.isSingleton();
 	}
+	
+	/**
+	 * 设置是否对超类进行注入
+	 */
+	public static void setInjectSuperClass(boolean injectSuperClass) {
+		aopFactory.setInjectSuperClass(injectSuperClass);
+	}
+	
+	public static boolean isInjectSuperClass() {
+		return aopFactory.isInjectSuperClass();
+	}
 }
 
 

+ 24 - 0
src/main/java/com/jfinal/aop/AopFactory.java

@@ -3,6 +3,8 @@ package com.jfinal.aop;
 import java.lang.reflect.Field;
 import java.util.HashMap;
 import java.util.concurrent.ConcurrentHashMap;
+import com.jfinal.core.Controller;
+import com.jfinal.plugin.activerecord.Model;
 
 /**
  * AopFactory 是工具类 Aop 功能的具体实现,详细用法见 Aop
@@ -22,6 +24,8 @@ public class AopFactory {
 	protected boolean singleton = true;					// 默认单例
 	protected boolean enhance = true;					// 默认增强
 	
+	protected boolean injectSuperClass = false;			// 默认不对超类进行注入
+	
 	public <T> T get(Class<T> targetClass) {
 		try {
 			return doGet(targetClass);
@@ -140,6 +144,14 @@ public class AopFactory {
 			field.setAccessible(true);
 			field.set(targetObject, fieldInjectedObject);
 		}
+		
+		// 是否对超类进行注入
+		if (injectSuperClass) {
+			Class<?> c = targetClass.getSuperclass();
+			if (c != Object.class && c != Controller.class && c != Interceptor.class && c != Model.class && c != null) {
+				doInject(c, targetObject);
+			}
+		}
 	}
 	
 	/**
@@ -189,6 +201,18 @@ public class AopFactory {
 		return singleton;
 	}
 	
+	/**
+	 * 设置是否对超类进行注入
+	 */
+	public AopFactory setInjectSuperClass(boolean injectSuperClass) {
+		this.injectSuperClass = injectSuperClass;
+		return this;
+	}
+	
+	public boolean isInjectSuperClass() {
+		return injectSuperClass;
+	}
+	
 	public AopFactory addSingletonObject(Object singletonObject) {
 		if (singletonObject == null) {
 			throw new IllegalArgumentException("singletonObject can not be null");