⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scopedclasspoolrepositoryimpl.java

📁 Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京技术学院的数学和计算机科学系的 Shigeru Chiba 所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使
💻 JAVA
字号:
/* * Javassist, a Java-bytecode translator toolkit. * Copyright (C) 2006 JBoss Inc. All Rights Reserved. * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License.  Alternatively, the contents of this file may be used under * the terms of the GNU Lesser General Public License Version 2.1 or later. * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. */package javassist.scopedpool;import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import java.util.Map;import java.util.WeakHashMap;import javassist.ClassPool;import javassist.LoaderClassPath;/** * An implementation of <code>ScopedClassPoolRepository</code>. * It is an singleton. * * @author <a href="kabir.khan@jboss.com">Kabir Khan</a> * @version $Revision: 1.3 $ */public class ScopedClassPoolRepositoryImpl implements ScopedClassPoolRepository {    /** The instance */    private static final ScopedClassPoolRepositoryImpl instance = new ScopedClassPoolRepositoryImpl();    /** Whether to prune */    private boolean prune = true;    /** Whether to prune when added to the classpool's cache */    boolean pruneWhenCached;    /** The registered classloaders */    protected Map registeredCLs = Collections            .synchronizedMap(new WeakHashMap());    /** The default class pool */    protected ClassPool classpool;    /** The factory for creating class pools */    protected ScopedClassPoolFactory factory = new ScopedClassPoolFactoryImpl();    /**     * Get the instance.     *      * @return the instance.     */    public static ScopedClassPoolRepository getInstance() {        return instance;    }    /**     * Singleton.     */    private ScopedClassPoolRepositoryImpl() {        classpool = ClassPool.getDefault();        // FIXME This doesn't look correct        ClassLoader cl = Thread.currentThread().getContextClassLoader();        classpool.insertClassPath(new LoaderClassPath(cl));    }    /**     * Returns the value of the prune attribute.     *      * @return the prune.     */    public boolean isPrune() {        return prune;    }    /**     * Set the prune attribute.     *      * @param prune     a new value.     */    public void setPrune(boolean prune) {        this.prune = prune;    }    /**     * Create a scoped classpool.     *      * @param cl    the classloader.     * @param src   the original classpool.     * @return the classpool     */    public ScopedClassPool createScopedClassPool(ClassLoader cl, ClassPool src) {        return factory.create(cl, src, this);    }    public ClassPool findClassPool(ClassLoader cl) {        if (cl == null)            return registerClassLoader(ClassLoader.getSystemClassLoader());        return registerClassLoader(cl);    }    /**     * Register a classloader.     *      * @param ucl       the classloader.     * @return the classpool     */    public ClassPool registerClassLoader(ClassLoader ucl) {        synchronized (registeredCLs) {            // FIXME: Probably want to take this method out later            // so that AOP framework can be independent of JMX            // This is in here so that we can remove a UCL from the ClassPool as            // a            // ClassPool.classpath            if (registeredCLs.containsKey(ucl)) {                return (ClassPool)registeredCLs.get(ucl);            }            ScopedClassPool pool = createScopedClassPool(ucl, classpool);            registeredCLs.put(ucl, pool);            return pool;        }    }    /**     * Get the registered classloaders.     */    public Map getRegisteredCLs() {        clearUnregisteredClassLoaders();        return registeredCLs;    }    /**     * This method will check to see if a register classloader has been     * undeployed (as in JBoss)     */    public void clearUnregisteredClassLoaders() {        ArrayList toUnregister = null;        synchronized (registeredCLs) {            Iterator it = registeredCLs.values().iterator();            while (it.hasNext()) {                ScopedClassPool pool = (ScopedClassPool)it.next();                if (pool.isUnloadedClassLoader()) {                    it.remove();                    ClassLoader cl = pool.getClassLoader();                    if (cl != null) {                        if (toUnregister == null) {                            toUnregister = new ArrayList();                        }                        toUnregister.add(cl);                    }                }            }            if (toUnregister != null) {                for (int i = 0; i < toUnregister.size(); i++) {                    unregisterClassLoader((ClassLoader)toUnregister.get(i));                }            }        }    }    public void unregisterClassLoader(ClassLoader cl) {        synchronized (registeredCLs) {            ScopedClassPool pool = (ScopedClassPool)registeredCLs.remove(cl);            if (pool != null)                pool.close();        }    }    public void insertDelegate(ScopedClassPoolRepository delegate) {        // Noop - this is the end    }    public void setClassPoolFactory(ScopedClassPoolFactory factory) {        this.factory = factory;    }    public ScopedClassPoolFactory getClassPoolFactory() {        return factory;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -