走自己的路

          路漫漫其修遠兮,吾將上下而求索

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            50 隨筆 :: 4 文章 :: 118 評論 :: 0 Trackbacks
           
          1. 作為static變量,static屬性是不會被序列化的,但是log object被定義成static,如果該類是shared library,常常會出現問題。因為shared libraryclassloader可能是每個application classloader的祖輩,所以這些類只會被load一次,也就是說所有application就會共享這個log object,所有的log信息都會輸出到相同的地方.
          public class Foo {
            
          private final static Log log = LogFactory.getLog(Foo.class);
            .etc
          }

           

          1. 作為類的實例變量:log對象一般情況下是不需要序列化的,所以我們需要用transient來聲明。

          方法1

              
            private transient Log log;
            
          private Log getLog() {
              
          if (log == null)
                log
          =LogFactory.getLog(Some.class);
              
          return log;
            }

            getLog().debug(
          "foo");

           

          方法2

          private transient Log log = LogFactory.getLog(Some.class);
            
          private Object readResolve() {
               log 
          = LogFactory.getLog(Some.class);
               
          return this;
            }

           

          這個比起靜態變量,每個實例都需要創建一個引用,都要分配4或者8個字節的空間,需要消耗更多的cpu和內存,但是保險。




          posted on 2008-07-04 11:38 叱咤紅人 閱讀(1250) 評論(2)  編輯  收藏 所屬分類: J2SE and JVM Other Java and J2EE frameworks

          評論

          # re: 在可序列化的類中使用log對象 2008-07-04 17:06 Jack.Wang
          以前在做 web 時就有過 shared library 的問題----類轉型沖突(明明是這個類的對象怎么沖突呢?原因就是不同的 classloader 加載的class,對象屬于不同的 class),最后是把 lib 放到 share lib 下,這樣每個子 classloader 就可以共用 class.  回復  更多評論
            

          # re: 在可序列化的類中使用log對象 2008-07-06 10:52 sqh
          好文章!頂!  回復  更多評論
            

          主站蜘蛛池模板: 上林县| 驻马店市| 林周县| 雅安市| 射阳县| 石阡县| 汶川县| 大荔县| 德庆县| 县级市| 蒙阴县| 枞阳县| 乳源| 怀集县| 靖安县| 台前县| 沙田区| 天水市| 罗田县| 桓仁| 铜鼓县| 海原县| 寻乌县| 柞水县| 大宁县| 盱眙县| 拉萨市| 和林格尔县| 吴桥县| 博爱县| 洪湖市| 峨眉山市| 嵩明县| 金阳县| 日土县| 蓝山县| 高州市| 将乐县| 扎鲁特旗| 天气| 保山市|