spring-loaded SpringLoaded 源码

  • 2022-08-16
  • 浏览 (562)

spring-loaded SpringLoaded 代码

文件路径:/springloaded/src/main/java/org/springsource/loaded/SpringLoaded.java

/*
 * Copyright 2010-2012 VMware and contributors
 *
 * 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
 *
 *      https://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 org.springsource.loaded;

/**
 * API for directly interacting with SpringLoaded.
 * 
 * @author Andy Clement
 * @since 0.8.0
 */
public class SpringLoaded {

	/**
	 * Force a reload of an existing type.
	 * 
	 * @param clazz the class to be reloaded
	 * @param newbytes the data bytecode data to reload as the new version
	 * @return int return code: 0 is success. 1 is unknown classloader, 2 is unknown type (possibly not yet loaded). 3
	 *         is reload event failed. 4 is exception occurred.
	 */
	public static int loadNewVersionOfType(Class<?> clazz, byte[] newbytes) {
		return loadNewVersionOfType(clazz.getClassLoader(), clazz.getName(), newbytes);
	}

	/**
	 * Force a reload of an existing type.
	 * 
	 * @param classLoader the classloader that was used to load the original form of the type
	 * @param dottedClassname the dotted name of the type being reloaded, e.g. com.foo.Bar
	 * @param newbytes the data bytecode data to reload as the new version
	 * @return int return code: 0 is success. 1 is unknown classloader, 2 is unknown type (possibly not yet loaded). 3
	 *         is reload event failed. 4 is exception occurred.
	 */
	public static int loadNewVersionOfType(ClassLoader classLoader, String dottedClassname, byte[] newbytes) {
		try {
			// Obtain the type registry of interest
			TypeRegistry typeRegistry = TypeRegistry.getTypeRegistryFor(classLoader);
			if (typeRegistry == null) {
				return 1;
			}
			// Find the reloadable type
			ReloadableType reloadableType = typeRegistry.getReloadableType(dottedClassname.replace('.', '/'));
			if (reloadableType == null) {
				return 2;
			}
			// Create a unique version tag for this reload attempt
			String tag = Utils.encode(System.currentTimeMillis());
			boolean reloaded = reloadableType.loadNewVersion(tag, newbytes);
			return reloaded ? 0 : 3;
		}
		catch (Exception e) {
			e.printStackTrace();
			return 4;
		}
	}
}

相关信息

spring-loaded 源码目录

相关文章

spring-loaded AbstractMember 源码

spring-loaded AnyTypePattern 源码

spring-loaded Asserts 源码

spring-loaded C 源码

spring-loaded ChildClassLoader 源码

spring-loaded ClassRenamer 源码

spring-loaded ConstantPoolChecker 源码

spring-loaded ConstantPoolChecker2 源码

spring-loaded ConstantPoolScanner 源码

spring-loaded Constants 源码

0  赞