<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    利用java的動態代理寫日志

    Posted on 2008-02-05 03:12 semovy 閱讀(1146) 評論(0)  編輯  收藏 所屬分類: 設計模式JAVA應用
    1.測試的實體Bean  Person類

    Person.java

    package com.semovy.bean;

    public class Person {
     
     private String id;

     private String name;

     private String note;

     public String getId() {
      return id;
     }

     public void setId(String id) {
      this.id = id;
     }

     public String getName() {
      return name;
     }

     public void setName(String name) {
      this.name = name;
     }

     public String getNote() {
      return note;
     }

     public void setNote(String note) {
      this.note = note;
     }

     public Person(String id, String name, String note) {
      super();
      this.id = id;
      this.name = name;
      this.note = note;
     }

     @Override
     public String toString() {
      // TODO Auto-generated method stub
      return "id: " + id + " name: " +  name + " note: " + note;
     }

    }
    2.操作Person實體類的接口PersonService

    PersonService.java

    package com.semovy.service;

    import java.util.ArrayList;
    import java.util.List;

    import com.semovy.bean.Person;

    public interface PersonService {

     public List<Person> persons = new ArrayList<Person>();

     public abstract void addPerson(Person person);

     public abstract Person getPersonById(String id);

     public abstract void deletePersonById(String id);

     //public abstract void updatePerson(Person person);

     public abstract void displayPersonById(String id);

     public abstract void displayAllPersons();
    }
    3.實現PersonService接口的PersonServiceImpl

    PersonServiceImpl.java

    package com.semovy.service.impl;

    import java.util.Iterator;

    import com.semovy.bean.Person;
    import com.semovy.service.PersonService;

    public class PersonServiceImpl implements PersonService {

     public void addPerson(Person person) {
      persons.add(person);
     }

     public void deletePersonById(String id) {
      Iterator it = persons.iterator();
      while(it.hasNext())
      {
       Person person = (Person)it.next();
       if(person.getId().equals(id))
       {
        it.remove();
        break;
       }
      }
     }

     public void displayAllPersons() {
      
      Iterator it = persons.iterator();
      while(it.hasNext())
      {
       Person person = (Person)it.next();
       System.out.println(person.toString());
      }
     }

     public void displayPersonById(String id) {
      
      Iterator it = persons.iterator();
      while(it.hasNext())
      {
       Person person = (Person)it.next();
       if(person.getId().equals(id))
       {
        System.out.println(person.toString());
        break;
       }
      }
      
     }

     public Person getPersonById(String id) {
      Iterator it = persons.iterator();
      while(it.hasNext())
      {
       Person person = (Person)it.next();
       if(person.getId().equals(id))
       {
        return person;
       }
      }
      return null;
     }

     /*public void updatePerson(Strin) {
      Iterator it = persons.iterator();
      while(it.hasNext())
      {
       Person person = (Person)it.next();
       if(person == aperson)
       {
        persons.set(arg0, arg1)
       }
      }
     }*/

    }

    4.寫日志的代理類LogProxy   它實現了InvocationHandler接口

    LogProxy.java

    package com.semovy.bean;

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;

    import org.apache.log4j.Level;
    import org.apache.log4j.Logger;


    public class LogProxy implements InvocationHandler {
     
     Logger logger = Logger.getLogger(this.getClass().getName());
     private Object delegate = null;
     
     public Object getDelegate() {
      return delegate;
     }

     public void setDelegate(Object delegate) {
      this.delegate = delegate;
     }

     public Object bind(Object delegate) {
      this.delegate = delegate;
      return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),
        delegate.getClass().getInterfaces(),this);
     }

     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
      Object result = null;
      try
      {
       logger.log(Level.INFO,method.getName() +  " 開始處理...");
       result = method.invoke(this.delegate, args);
       logger.log(Level.INFO,method.getName() +  " 結束處理...");
      }catch(Exception e)
      {
       logger.log(Level.ERROR,e.getLocalizedMessage());
      }
      
      return result;
     }
    }

    5.在eclipse中添加log4j.properties

    log4j.properties

    log4j.rootLogger=DEBUG,stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %5p (%F:%L) - %m%n

    5.寫測試類Test.java

    Test.java

    package com.semovy.test;

    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Iterator;
    import java.util.List;

    import com.semovy.bean.LogProxy;
    import com.semovy.bean.Person;
    import com.semovy.service.PersonService;
    import com.semovy.service.impl.PersonServiceImpl;

    public class Test {

     /**
      * @param args
      */
     public static void main(String[] args) {

      LogProxy logProxy = new LogProxy();
      PersonService personService = (PersonService)logProxy.bind(new PersonServiceImpl());
      personService.addPerson(new Person("1","name1","note1"));
      personService.addPerson(new Person("2","name2","note2"));
      personService.addPerson(new Person("3","name3","note3"));
      personService.addPerson(new Person("4","name4","note4"));
      personService.displayPersonById("3");
      personService.displayAllPersons();
      Person person = personService.getPersonById("2");
      person.setName("名稱2");
      person.setNote("注腳2");
      personService.displayAllPersons();
      personService.deletePersonById("2");
      personService.displayAllPersons();
      //saveToFile(persons,"c:/persons.txt");
     }
     
     public static void saveToFile(List list,String path)
     {
      System.out.println("開始寫入文件...");
      try
      {
       PrintWriter out = new PrintWriter(new File(path));
       Iterator it = list.iterator();
       while(it.hasNext())
       {
        Person person = (Person)it.next();
        out.println(person.toString());
       }
       out.flush();
       out.close();
       System.out.println("結束寫入文件...");
      }catch(IOException e)
      {
       System.out.println(e.getLocalizedMessage());
      }
      
     }
    }


    6.運行測試結果:

    2008-02-05 02:55:28,926  INFO (LogProxy.java:34) - addPerson 開始處理...
    2008-02-05 02:55:28,926  INFO (LogProxy.java:36) - addPerson 結束處理...
    2008-02-05 02:55:28,926  INFO (LogProxy.java:34) - addPerson 開始處理...
    2008-02-05 02:55:28,926  INFO (LogProxy.java:36) - addPerson 結束處理...
    2008-02-05 02:55:28,926  INFO (LogProxy.java:34) - addPerson 開始處理...
    2008-02-05 02:55:28,936  INFO (LogProxy.java:36) - addPerson 結束處理...
    2008-02-05 02:55:28,936  INFO (LogProxy.java:34) - addPerson 開始處理...
    2008-02-05 02:55:29,036  INFO (LogProxy.java:36) - addPerson 結束處理...
    2008-02-05 02:55:29,036  INFO (LogProxy.java:34) - displayPersonById 開始處理...
    id: 3 name: name3 note: note3
    2008-02-05 02:55:29,036  INFO (LogProxy.java:36) - displayPersonById 結束處理...
    2008-02-05 02:55:29,036  INFO (LogProxy.java:34) - displayAllPersons 開始處理...
    id: 1 name: name1 note: note1
    id: 2 name: name2 note: note2
    id: 3 name: name3 note: note3
    id: 4 name: name4 note: note4
    2008-02-05 02:55:29,046  INFO (LogProxy.java:36) - displayAllPersons 結束處理...
    2008-02-05 02:55:29,046  INFO (LogProxy.java:34) - getPersonById 開始處理...
    2008-02-05 02:55:29,046  INFO (LogProxy.java:36) - getPersonById 結束處理...
    2008-02-05 02:55:29,046  INFO (LogProxy.java:34) - displayAllPersons 開始處理...
    id: 1 name: name1 note: note1
    id: 2 name: 名稱2 note: 注腳2
    id: 3 name: name3 note: note3
    id: 4 name: name4 note: note4
    2008-02-05 02:55:29,046  INFO (LogProxy.java:36) - displayAllPersons 結束處理...
    2008-02-05 02:55:29,046  INFO (LogProxy.java:34) - deletePersonById 開始處理...
    2008-02-05 02:55:29,046  INFO (LogProxy.java:36) - deletePersonById 結束處理...
    2008-02-05 02:55:29,046  INFO (LogProxy.java:34) - displayAllPersons 開始處理...
    id: 1 name: name1 note: note1
    id: 3 name: name3 note: note3
    id: 4 name: name4 note: note4
    2008-02-05 02:55:29,046  INFO (LogProxy.java:36) - displayAllPersons 結束處理...


    主站蜘蛛池模板: 亚洲乱色伦图片区小说| 国产精品亚洲а∨无码播放| 亚洲中文无码线在线观看| 成人久久免费网站| 亚洲综合熟女久久久30p| jizz免费在线影视观看网站| 亚洲精品尤物yw在线影院| 日本精品久久久久久久久免费| 国产男女猛烈无遮挡免费网站| 亚洲香蕉久久一区二区三区四区| 日本亚洲免费无线码| 亚洲人xxx日本人18| 成人午夜18免费看| 国产精品亚洲а∨无码播放不卡| 免费观看国产小粉嫩喷水| 黄床大片30分钟免费看| 亚洲中文字幕第一页在线| 久久国产精品国产自线拍免费| 亚洲男人都懂得羞羞网站| 亚洲一级免费毛片| 亚洲人成网站在线在线观看| 国产精品久久免费视频| 精品国产免费人成网站| 久久精品国产亚洲AV网站| 久久久久久精品免费免费自慰| 亚洲愉拍一区二区三区| 全亚洲最新黄色特级网站| 免费观看91视频| 色在线亚洲视频www| 亚洲国产精品成人| 久久久久久毛片免费播放| 国产 亚洲 中文在线 字幕| 亚洲A∨精品一区二区三区| a级毛片毛片免费观看久潮喷| 亚洲精品视频在线观看视频| 啦啦啦在线免费视频| 日韩av无码免费播放| 亚洲熟女乱色一区二区三区| 国产午夜亚洲精品国产成人小说| www视频在线观看免费| 男人和女人高潮免费网站|