All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jfinal.aop.Enhancer Maven / Gradle / Ivy

Go to download

JFinal is a simple, light, rapid,independent, extensible Java WEB + ORM framework. The feature of JFinal looks like ruby on rails especially ActiveRecord.

The newest version!
/**
 * Copyright (c) 2011-2019, James Zhan 詹波 ([email protected]).
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.jfinal.aop;

import java.util.concurrent.ConcurrentHashMap;

/**
 * Enhancer
 */
@SuppressWarnings("unchecked")
public class Enhancer {
	
	private static final ConcurrentHashMap singleton = new ConcurrentHashMap();
	
	private Enhancer(){}

	public static  T enhance(Class targetClass) {
		return (T)net.sf.cglib.proxy.Enhancer.create(targetClass, new Callback());
	}
	
	public static  T enhance(Class targetClass, Interceptor... injectInters) {
		return (T)net.sf.cglib.proxy.Enhancer.create(targetClass, new Callback(injectInters));
	}
	
	public static  T enhance(Class targetClass, Class... injectIntersClasses) {
		return (T)enhance(targetClass, createInjectInters(injectIntersClasses));
	}
	
	public static  T enhance(Class targetClass, Class injectIntersClass) {
		return (T)enhance(targetClass, createInjectInters(injectIntersClass));
	}
	
	public static  T enhance(Class targetClass, Class injectIntersClass1, Class injectIntersClass2) {
		return (T)enhance(targetClass, createInjectInters(injectIntersClass1, injectIntersClass2));
	}
	
	public static  T enhance(Class targetClass, Class injectIntersClass1, Class injectIntersClass2, Class injectIntersClass3) {
		return (T)enhance(targetClass, createInjectInters(injectIntersClass1, injectIntersClass2, injectIntersClass3));
	}
	
	public static  T getTarget(String singletonKey) {
		return (T)singleton.get(singletonKey);
	}
	
	public static  T enhance(String singletonKey, Class targetClass) {
		Object ret = singleton.get(singletonKey);
		if (ret == null) {
			synchronized (Enhancer.class) {
				ret = singleton.get(singletonKey);
				if (ret == null) {
					ret = enhance(targetClass);
					singleton.put(singletonKey, ret);
				}
			}
		}
		return (T)ret;
	}
	
	public static  T enhance(String singletonKey, Class targetClass, Interceptor... injectInters) {
		Object ret = singleton.get(singletonKey);
		if (ret == null) {
			synchronized (Enhancer.class) {
				ret = singleton.get(singletonKey);
				if (ret == null) {
					ret = enhance(targetClass, injectInters);
					singleton.put(singletonKey, ret);
				}
			}
		}
		return (T)ret;
	}
	
	public static  T enhance(String singletonKey, Class targetClass, Class... injectIntersClasses) {
		Object ret = singleton.get(singletonKey);
		if (ret == null) {
			synchronized (Enhancer.class) {
				ret = singleton.get(singletonKey);
				if (ret == null) {
					ret = enhance(targetClass, injectIntersClasses);
					singleton.put(singletonKey, ret);
				}
			}
		}
		return (T)ret;
	}
	
	public static  T enhance(Object target) {
		return (T)net.sf.cglib.proxy.Enhancer.create(target.getClass(), new Callback(target));
	}
	
	public static  T enhance(Object target, Interceptor... injectInters) {
		return (T)net.sf.cglib.proxy.Enhancer.create(target.getClass(), new Callback(target, injectInters));
	}
	
	public static  T enhance(Object target, Class... injectIntersClasses) {
		return (T)enhance(target, createInjectInters(injectIntersClasses));
	}
	
	public static  T enhance(Object target, Class injectIntersClass) {
		return (T)enhance(target, createInjectInters(injectIntersClass));
	}
	
	public static  T enhance(Object target, Class injectIntersClass1, Class injectIntersClass2) {
		return (T)enhance(target, createInjectInters(injectIntersClass1, injectIntersClass2));
	}
	
	public static  T enhance(Object target, Class injectIntersClass1, Class injectIntersClass2, Class injectIntersClass3) {
		return (T)enhance(target, createInjectInters(injectIntersClass1, injectIntersClass2, injectIntersClass3));
	}
	
	public static  T enhance(String singletonKey, Object target) {
		Object ret = singleton.get(singletonKey);
		if (ret == null) {
			synchronized (Enhancer.class) {
				ret = singleton.get(singletonKey);
				if (ret == null) {
					ret = enhance(target);
					singleton.put(singletonKey, ret);
				}
			}
		}
		return (T)ret;
	}
	
	public static  T enhance(String singletonKey, Object target, Interceptor... injectInters) {
		Object ret = singleton.get(singletonKey);
		if (ret == null) {
			synchronized (Enhancer.class) {
				ret = singleton.get(singletonKey);
				if (ret == null) {
					ret = enhance(target, injectInters);
					singleton.put(singletonKey, ret);
				}
			}
		}
		return (T)ret;
	}
	
	public static  T enhance(String singletonKey, Object target, Class... injectIntersClasses) {
		Object ret = singleton.get(singletonKey);
		if (ret == null) {
			synchronized (Enhancer.class) {
				ret = singleton.get(singletonKey);
				if (ret == null) {
					ret = enhance(target, injectIntersClasses);
					singleton.put(singletonKey, ret);
				}
			}
		}
		return (T)ret;
	}
	
	private static Interceptor[] createInjectInters(Class... injectInterClasses) {
		return InterceptorManager.me().createInterceptor(injectInterClasses);
	}
}






© 2015 - 2025 Weber Informatics LLC | Privacy Policy