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

          利用java的動態(tài)代理寫日志

          Posted on 2008-02-05 03:12 semovy 閱讀(1147) 評論(0)  編輯  收藏 所屬分類: 設(shè)計模式JAVA應(yīng)用
          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.實現(xiàn)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   它實現(xiàn)了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() +  " 結(jié)束處理...");
            }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("結(jié)束寫入文件...");
            }catch(IOException e)
            {
             System.out.println(e.getLocalizedMessage());
            }
            
           }
          }


          6.運行測試結(jié)果:

          2008-02-05 02:55:28,926  INFO (LogProxy.java:34) - addPerson 開始處理...
          2008-02-05 02:55:28,926  INFO (LogProxy.java:36) - addPerson 結(jié)束處理...
          2008-02-05 02:55:28,926  INFO (LogProxy.java:34) - addPerson 開始處理...
          2008-02-05 02:55:28,926  INFO (LogProxy.java:36) - addPerson 結(jié)束處理...
          2008-02-05 02:55:28,926  INFO (LogProxy.java:34) - addPerson 開始處理...
          2008-02-05 02:55:28,936  INFO (LogProxy.java:36) - addPerson 結(jié)束處理...
          2008-02-05 02:55:28,936  INFO (LogProxy.java:34) - addPerson 開始處理...
          2008-02-05 02:55:29,036  INFO (LogProxy.java:36) - addPerson 結(jié)束處理...
          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 結(jié)束處理...
          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 結(jié)束處理...
          2008-02-05 02:55:29,046  INFO (LogProxy.java:34) - getPersonById 開始處理...
          2008-02-05 02:55:29,046  INFO (LogProxy.java:36) - getPersonById 結(jié)束處理...
          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 結(jié)束處理...
          2008-02-05 02:55:29,046  INFO (LogProxy.java:34) - deletePersonById 開始處理...
          2008-02-05 02:55:29,046  INFO (LogProxy.java:36) - deletePersonById 結(jié)束處理...
          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 結(jié)束處理...


          主站蜘蛛池模板: 历史| 台安县| 新郑市| 德兴市| 罗城| 调兵山市| 虹口区| 日照市| 平潭县| 武义县| 丹东市| 富平县| 社旗县| 唐海县| 海口市| 丰镇市| 青神县| 西峡县| 江达县| 樟树市| 新竹县| 泗洪县| 普定县| 昔阳县| 宁安市| 阳新县| 八宿县| SHOW| 栾川县| 米林县| 织金县| 伊宁市| 南投市| 连山| 久治县| 从化市| 渑池县| 莆田市| 景宁| 兴仁县| 舒城县|