Synchronized로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

Synchronized로 검색한 결과
등록일:2008-03-12 11:04:54
작성자:
제목:Demonstration of a ClassLoader


import  java.lang.reflect.InvocationTargetException;
import  java.lang.reflect.Method;
import  java.util.Hashtable;

/**
  *  Demonstration  of  a  ClassLoader
  */
public  class  ClassLoaderDemo1  extends  ClassLoader  {
    /**  The  Hashtable  to  keep  track  of  classes,  to  avoid  re-loading  them  */
    protected  Hashtable  cache  =  new  Hashtable();

    /**  data's  expected  length  */
    private  final  int  dataLength  =  433;

    /**  data,  obtained  by  dumping  a  compiled  .class  file  */
    private  int[]  data  =  {  202,  254,  186,  190,  0,  3,  0,  45,  0,  31,  8,  0,  20,  7,
            0,  17,  7,  0,  25,  7,  0,  26,  7,  0,  27,  10,  0,  4,  0,  9,  9,  0,  5,  0,
            10,  10,  0,  3,  0,  11,  12,  0,  14,  0,  12,  12,  0,  28,  0,  22,  12,  0,  29,
            0,  13,  1,  0,  3,  40,  41,  86,  1,  0,  21,  40,  76,  106,  97,  118,  97,  47,
            108,  97,  110,  103,  47,  83,  116,  114,  105,  110,  103,  59,  41,  86,  1,
            0,  6,  60,  105,  110,  105,  116,  62,  1,  0,  4,  67,  111,  100,  101,  1,  0,
            13,  67,  111,  110,  115,  116,  97,  110,  116,  86,  97,  108,  117,  101,  1,
            0,  4,  68,  101,  109,  111,  1,  0,  9,  68,  101,  109,  111,  46,  106,  97,
            118,  97,  1,  0,  10,  69,  120,  99,  101,  112,  116,  105,  111,  110,  115,
            1,  0,  10,  72,  101,  108,  108,  111,  32,  74,  97,  118,  97,  1,  0,  15,
            76,  105,  110,  101,  78,  117,  109,  98,  101,  114,  84,  97,  98,  108,
            101,  1,  0,  21,  76,  106,  97,  118,  97,  47,  105,  111,  47,  80,  114,
            105,  110,  116,  83,  116,  114,  101,  97,  109,  59,  1,  0,  14,  76,  111,
            99,  97,  108,  86,  97,  114,  105,  97,  98,  108,  101,  115,  1,  0,  10,  83,
            111,  117,  114,  99,  101,  70,  105,  108,  101,  1,  0,  19,  106,  97,  118,
            97,  47,  105,  111,  47,  80,  114,  105,  110,  116,  83,  116,  114,  101,
            97,  109,  1,  0,  16,  106,  97,  118,  97,  47,  108,  97,  110,  103,  47,  79,
            98,  106,  101,  99,  116,  1,  0,  16,  106,  97,  118,  97,  47,  108,  97,
            110,  103,  47,  83,  121,  115,  116,  101,  109,  1,  0,  3,  111,  117,  116,
            1,  0,  7,  112,  114,  105,  110,  116,  108,  110,  1,  0,  4,  116,  101,  115,
            116,  0,  33,  0,  2,  0,  4,  0,  0,  0,  0,  0,  2,  0,  9,  0,  30,  0,  12,  0,  1,
            0,  15,  0,  0,  0,  37,  0,  2,  0,  0,  0,  0,  0,  9,  178,  0,  7,  18,  1,  182,
            0,  8,  177,  0,  0,  0,  1,  0,  21,  0,  0,  0,  10,  0,  2,  0,  0,  0,  9,  0,  8,
            0,  8,  0,  1,  0,  14,  0,  12,  0,  1,  0,  15,  0,  0,  0,  29,  0,  1,  0,  1,  0,
            0,  0,  5,  42,  183,  0,  6,  177,  0,  0,  0,  1,  0,  21,  0,  0,  0,  6,  0,  1,
            0,  0,  0,  7,  0,  1,  0,  24,  0,  0,  0,  2,  0,  18  };

    /**  "load",  that  is,  make  up,  the  data  for  the  class  */
    private  byte[]  genClassData(String  name)  {
        if  (dataLength  !=  data.length)
            throw  new  IllegalArgumentException("data  corrupt");
        byte[]  bd  =  new  byte[data.length];
        for  (int  i  =  0;  i  <  bd.length;  i++)
            bd[i]  =  (byte)  data[i];
        return  bd;
    }

    public  Synchronized  Class  loadClass(String  name,  boolean  resolve)
            throws  ClassNotFoundException  {
        /**
          *  We  can  expect  to  be  called  to  resolve  at  least  demo's  superclass
          *  (java.lang.Object).  Fortunatetely,  we  can  just  use
          *  super.findSystemClass()  to  load  such  things...
          */
        if  (name.startsWith("java."))  {
            System.out.println("loadClass:  SystemLoading  "  +  name);
            return  findSystemClass(name);
        }
        Class  c  =  (Class)  cache.get(name);
        if  (c  ==  null)  {
            System.out.println("loadClass:  About  to  genClassData  "  +  name);
            byte  mydata[]  =  genClassData(name);
            System.out.println("loadClass:  About  to  defineClass  "  +  name);
            c  =  defineClass(name,  mydata,  0,  mydata.length);
            System.out.println("loadClass:  storing  "  +  name  +  "  in  cache.");
            cache.put(name,  c);
        }  else
            System.out.println("loadClass:  found  "  +  name  +  "  in  cache.");
        if  (resolve)  {
            System.out.println("loadClass:  About  to  resolveClass  "  +  name);
            resolveClass(c);
        }
        return  c;
    }

    public  static  void  main(String[]  argv)  {
        System.out.println("ClassLoaderDemo1  starting");
        ClassLoaderDemo1  loader  =  new  ClassLoaderDemo1();
        Class  c  =  null;
        Object  demo;
        try  {
            /*  Load  the  "Demo"  class  from  memory  */

            System.out.println("About  to  load  class    Demo");
            c  =  loader.loadClass("Demo",  true);
            System.out.println("About  to  instantiate  class  Demo");
            demo  =  c.newInstance();
            System.out.println("Got  Demo  class  loaded:  "  +  demo);

            /*  Now  try  to  call  a  method  */

            Method  mi  =  c.getMethod("test",  null);
            mi.invoke(demo,  null);

        }  catch  (InvocationTargetException  e)  {
            //  The  invoked  method  threw  an  exception.  We  get  it
            //  wrapped  up  inside  another  exception,  hence  the
            //  extra  call  here:
            e.getTargetException().printStackTrace();
            System.out.println("Could  not  run  test  method");
        }  catch  (Exception  e)  {
            e.printStackTrace();
            System.out.println("Could  not  run  test  method");
        }

        /**
          *  Try  to  load  some  arbitrary  class,  to  see  if  our  ClassLoader  gets
          *  called.
          */
        System.out.println("Trying  to  load  an  unrelated  class");
        java.awt.image.DirectColorModel  jnk  =  new  java.awt.image.DirectColorModel(
                24,  8,  8,  8);
        System.out
                .println("Load  an  unrelated  class  -  was  your  ClassLoader  called?");

        /**  Try  to  instantiate  a  second  ClassLoader  */
        System.out.println("Trying  to  install  another  ClassLoader");
        ClassLoaderDemo1  loader2  =  new  ClassLoaderDemo1();
        System.out.println("Instantiated  another  ClassLoader...");
    }
}