??xml version="1.0" encoding="utf-8" standalone="yes"?>国产高清久久,亚洲国产精品久久人人爱蜜臀,91亚洲人成网污wwwhttp://www.aygfsteel.com/yjj317/category/14457.html在Qw的q代里,我们q取心太切,患得患失Q虚荣心太强Q战战兢兢。一心争强好胜,惟恐榜上无名?/description>zh-cnWed, 28 Feb 2007 07:48:59 GMTWed, 28 Feb 2007 07:48:59 GMT60PO BO VO DTO POJO DAO概念及其作用Q{载)http://www.aygfsteel.com/yjj317/articles/92844.htmlfish的Blogfish的BlogWed, 10 Jan 2007 02:59:00 GMThttp://www.aygfsteel.com/yjj317/articles/92844.htmlhttp://www.aygfsteel.com/yjj317/comments/92844.htmlhttp://www.aygfsteel.com/yjj317/articles/92844.html#Feedback0http://www.aygfsteel.com/yjj317/comments/commentRss/92844.htmlhttp://www.aygfsteel.com/yjj317/services/trackbacks/92844.html    首先声明偶也不是什么高手,以下ȝ都是自己的体会。不对之处请您多指教?/p>

POQ?br />persistant object持久对象

最形象的理解就是一个PO是数据库中的一条记录?br />好处是可以把一条记录作Z个对象处理,可以方便的{为其它对象?br />
BOQ?br />business object业务对象

主要作用是把业务逻辑装Z个对象。这个对象可以包括一个或多个其它的对象?br />比如一个简历,有教育经历、工作经历、社会关pȝ{?br />我们可以把教育经历对应一个POQ工作经历对应一个POQ社会关pd应一个PO?br />建立一个对应简历的BO对象处理历,每个BO包含q些PO?br />q样处理业务逻辑Ӟ我们可以针对BOd理?br />
VO Q?br />value object值对?br />ViewObject表现层对?br />
主要对应界面昄的数据对象。对于一个WEB面Q或者SWT、SWING的一个界面,用一个VO对象对应整个界面的倹{?/font>

DTO Q?br />Data Transfer Object数据传输对象
主要用于q程调用{需要大量传输对象的地方?br />比如我们一张表?00个字D,那么对应的PO有100个属性?br />但是我们界面上只要显C?0个字D,
客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,
q时我们可以用只有q?0个属性的DTO来传递结果到客户端,q样也不会暴露服务端表结?到达客户端以后,如果用这个对象来对应界面昄Q那此时它的w䆾p{为VO



POJO Q?br />plain ordinary java object 单ava对象
个h感觉POJO是最参见最多变的对象,是一个中间对象,也是我们最常打交道的对象?br />
一个POJO持久化以后就是PO
直接用它传递、传递过E中是DTO
直接用来对应表示层就是VO



DAOQ?br />data access object数据讉K对象
q个大家最熟悉Q和上面几个O区别最大,基本没有互相转化的可能性和必要.
主要用来装Ҏ据库的访问。通过它可以把POJO持久化ؓPOQ用POl装出来VO、DTO


      ȝ下我认ؓ一个对象究竟是什么O要看具体环境Q在不同的层、不同的应用场合Q对象的w䆾也不一P而且对象w䆾的{化也是很自然的。就像你对老婆来说是老公Q对父母来说是子女。设计这些概늚初衷不是Z唬h而是Z更好的理解和处理各种逻辑Q让大家能更好的ȝ面向对象的方式处理问?

      大家千万不要陷入q度设计Q大可不必ؓ了设计而设计一定要在代码中区分各个对象。一句话技术是为应用服务的?br />
Ƣ迎指正?br />





fish的Blog 2007-01-10 10:59 发表评论
]]>
用Java写的定时dhttp://www.aygfsteel.com/yjj317/articles/77385.htmlfish的Blogfish的BlogThu, 26 Oct 2006 05:44:00 GMThttp://www.aygfsteel.com/yjj317/articles/77385.htmlhttp://www.aygfsteel.com/yjj317/comments/77385.htmlhttp://www.aygfsteel.com/yjj317/articles/77385.html#Feedback0http://www.aygfsteel.com/yjj317/comments/commentRss/77385.htmlhttp://www.aygfsteel.com/yjj317/services/trackbacks/77385.html用Java定的定时dQ有的时候在执行一些后CQ务时很有?/p>

listenBean.java

import javax.servlet.*;
import java.util.*;
public class listenerBean implements ServletContextListener {
  private java.util.Timer timer = null;
  public void contextInitialized(ServletContextEvent event) {
  timer = new Timer(true);
  //定时器已启动
  timer.schedule(new MyTask(), 0, (long) 1000*60);//定时1分钟
  //已经dd调度?br /> }
 public void contextDestroyed(ServletContextEvent event) {
  timer.cancel();
  //定时器销?br /> }
}
class MyTask extends TimerTask {
 private static boolean isRunning = false;
 public void run() {
  if (!isRunning) {
   isRunning = true;
   //开始执行Q?br />   //ToDo ....
   //执行d完成
   isRunning = false;
  } else {
   //上一ơQ务执行还未结?br />  }
 }
}

web.xml

<web-app>
 <listener>
    <listener-class>listenerBean</listener-class>
</listener>
</web-app>


fish的Blog 2006-10-26 13:44 发表评论
]]>
目录列示?-案例 (转蝲)http://www.aygfsteel.com/yjj317/articles/65662.htmlfish的Blogfish的BlogFri, 25 Aug 2006 00:11:00 GMThttp://www.aygfsteel.com/yjj317/articles/65662.htmlhttp://www.aygfsteel.com/yjj317/comments/65662.htmlhttp://www.aygfsteel.com/yjj317/articles/65662.html#Feedback0http://www.aygfsteel.com/yjj317/comments/commentRss/65662.htmlhttp://www.aygfsteel.com/yjj317/services/trackbacks/65662.html 目录列示?/span>

本实例演C如何得C个目录下的所有文件列?/span> .

1.       q里利用?/span> DirFilter 实现?/span> FilenameFilter 接口 , 因此必须l承 accept 的方?/span> .

2.       用到了匹配字W序列与正则表达式指定模式的c?/span> Matcher,Pattern 所以要 java.util.regex 引入 .

实例E序 :

package javaio;

import java.io.*;

import java.util.*;

import java.util.regex.*;

 

public class DirList {

  public static void main(String[] args) {

    File path = new File("c:/");

    String[] list;

    if(args.length == 0){

      list = path.list();

    }

    else{

      // q里输入的参数作ؓqo因子

      list = path.list(new DirFilter(args[0]));

    }

    for(int i = 0; i < list.length; i++){

      System.out.println(list[i]);

    }

  }

}

 

class DirFilter implements FilenameFilter {

  private Pattern pattern;

  public DirFilter(String regex) {

    pattern = Pattern.compile(regex);

  }

  public boolean accept(File dir, String name) {

    // 判断名ؓ name 的文件是不是W合qo条g

    return pattern.matcher(new File(name).getName()).matches();/*matches() 试整个区?/span> / 与模式匹配?/span> new File(name).getName() 得到 String name*/

  }

}

q行l果 :

Image00003.jpg



fish的Blog 2006-08-25 08:11 发表评论
]]>
Java反射l典实例 (转蝲)http://www.aygfsteel.com/yjj317/articles/65661.htmlfish的Blogfish的BlogFri, 25 Aug 2006 00:05:00 GMThttp://www.aygfsteel.com/yjj317/articles/65661.htmlhttp://www.aygfsteel.com/yjj317/comments/65661.htmlhttp://www.aygfsteel.com/yjj317/articles/65661.html#Feedback0http://www.aygfsteel.com/yjj317/comments/commentRss/65661.htmlhttp://www.aygfsteel.com/yjj317/services/trackbacks/65661.html
1. 得到某个对象的属?br />
1 public Object getProperty(Object owner, String fieldName) throws Exception {
2     Class ownerClass = owner.getClass();
3 
4     Field field = ownerClass.getField(fieldName);
5 
6     Object property = field.get(owner);
7 
8     return property;
9 }

Class ownerClass = owner.getClass()Q得到该对象的Class?br />
Field field = ownerClass.getField(fieldName)Q通过Class得到cd明的属性?br />
Object property = field.get(owner)Q通过对象得到该属性的实例Q如果这个属性是非公有的Q这里会报IllegalAccessException?br />


2. 得到某个cȝ静态属?br />
 1 public Object getStaticProperty(String className, String fieldName)
 2             throws Exception {
 3     Class ownerClass = Class.forName(className);
 4 
 5     Field field = ownerClass.getField(fieldName);
 6 
 7     Object property = field.get(ownerClass);
 8 
 9     return property;
10 }


Class ownerClass = Class.forName(className) Q首先得到这个类的Class?br />
Field field = ownerClass.getField(fieldName)Q和上面一P通过Class得到cd明的属性?br />
Object property = field.get(ownerClass) Q这里和上面有些不同Q因属性是静态的Q所以直接从cȝClass里取?br />

3. 执行某对象的Ҏ

 1 public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception {
 2 
 3     Class ownerClass = owner.getClass();
 4 
 5     Class[] argsClass = new Class[args.length];
 6 
 7     for (int i = 0, j = args.length; i < j; i++) {
 8         argsClass[i] = args[i].getClass();
 9     }
10 
11     Method method = ownerClass.getMethod(methodName, argsClass);
12 
13     return method.invoke(owner, args);
14 }

Class owner_class = owner.getClass() Q首先还是必d到这个对象的Class?br />
5?行:配置参数的Class数组Q作为寻找Method的条件?br />
Method method = ownerClass.getMethod(methodName, argsClass)Q通过Method名和参数的Class数组得到要执行的Method?br />
method.invoke(owner, args)Q执行该MethodQinvokeҎ的参数是执行q个Ҏ的对象,和参数数l。返回值是ObjectQ也既是该方法的q回倹{?br />

4. 执行某个cȝ静态方?br />
 1 public Object invokeStaticMethod(String className, String methodName,
 2             Object[] args) throws Exception {
 3     Class ownerClass = Class.forName(className);
 4 
 5     Class[] argsClass = new Class[args.length];
 6 
 7     for (int i = 0, j = args.length; i < j; i++) {
 8         argsClass[i] = args[i].getClass();
 9     }
10 
11     Method method = ownerClass.getMethod(methodName, argsClass);
12 
13     return method.invoke(null, args);
14 }


基本的原理和实例3相同Q不同点是最后一行,invoke的一个参数是nullQ因是静态方法,不需要借助实例q行?br />


5. 新徏实例
 1 
 2 public Object newInstance(String className, Object[] args) throws Exception {
 3     Class newoneClass = Class.forName(className);
 4 
 5     Class[] argsClass = new Class[args.length];
 6 
 7     for (int i = 0, j = args.length; i < j; i++) {
 8         argsClass[i] = args[i].getClass();
 9     }
10 
11     Constructor cons = newoneClass.getConstructor(argsClass);
12 
13     return cons.newInstance(args);
14 
15 }


q里说的Ҏ是执行带参数的构造函数来新徏实例的方法。如果不需要参敎ͼ可以直接使用newoneClass.newInstance()来实现?br />
Class newoneClass = Class.forName(className)Q第一步,得到要构造的实例的Class?br />
W?~第9行:得到参数的Class数组?br />
Constructor cons = newoneClass.getConstructor(argsClass)Q得到构造子?br />
cons.newInstance(args)Q新建实例?br />

6. 判断是否为某个类的实?br />
1 public boolean isInstance(Object obj, Class cls) {
2     return cls.isInstance(obj);
3 }



7. 得到数组中的某个元素
1 public Object getByArray(Object array, int index) {
2     return Array.get(array,index);
3 }



附完整源码:

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;


/**
 * Java Reflection Cookbook
 *
 * 
@author Michael Lee
 * 
@since 2006-8-23
 * 
@version 0.1a
 
*/

public class Reflection {
    
/**
     * 得到某个对象的公共属?br />     *
     * 
@param owner, fieldName
     * 
@return 该属性对?br />     * @throws Exception
     *
     
*/
    
public Object getProperty(Object owner, String fieldName) throws Exception {
        Class ownerClass 
= owner.getClass();

        Field field 
= ownerClass.getField(fieldName);

        Object property 
= field.get(owner);

        
return property;
    }

    
/**
     * 得到某类的静态公共属?br />     *
     * 
@param className   cd
     * 
@param fieldName   属性名
     * 
@return 该属性对?br />     * @throws Exception
     
*/
    
public Object getStaticProperty(String className, String fieldName)
            
throws Exception {
        Class ownerClass 
= Class.forName(className);

        Field field 
= ownerClass.getField(fieldName);

        Object property 
= field.get(ownerClass);

        
return property;
    }


    
/**
     * 执行某对象方?br />     *
     * 
@param owner
     *            对象
     * 
@param methodName
     *            Ҏ?br />     * 
@param args
     *            参数
     * 
@return Ҏq回?br />     * @throws Exception
     
*/
    
public Object invokeMethod(Object owner, String methodName, Object[] args)
            
throws Exception {

        Class ownerClass 
= owner.getClass();

        Class[] argsClass 
= new Class[args.length];

        
for (int i = 0, j = args.length; i < j; i++) {
            argsClass[i] 
= args[i].getClass();
        }

        Method method 
= ownerClass.getMethod(methodName, argsClass);

        
return method.invoke(owner, args);
    }


      
/**
     * 执行某类的静态方?br />     *
     * 
@param className
     *            cd
     * 
@param methodName
     *            Ҏ?br />     * 
@param args
     *            参数数组
     * 
@return 执行Ҏq回的结?br />     * @throws Exception
     
*/
    
public Object invokeStaticMethod(String className, String methodName,
            Object[] args) 
throws Exception {
        Class ownerClass 
= Class.forName(className);

        Class[] argsClass 
= new Class[args.length];

        
for (int i = 0, j = args.length; i < j; i++) {
            argsClass[i] 
= args[i].getClass();
        }

        Method method 
= ownerClass.getMethod(methodName, argsClass);

        
return method.invoke(null, args);
    }



    
/**
     * 新徏实例
     *
     * 
@param className
     *            cd
     * 
@param args
     *            构造函数的参数
     * 
@return 新徏的实?br />     * @throws Exception
     
*/
    
public Object newInstance(String className, Object[] args) throws Exception {
        Class newoneClass 
= Class.forName(className);

        Class[] argsClass 
= new Class[args.length];

        
for (int i = 0, j = args.length; i < j; i++) {
            argsClass[i] 
= args[i].getClass();
        }

        Constructor cons 
= newoneClass.getConstructor(argsClass);

        
return cons.newInstance(args);

    }


    
    
/**
     * 是不是某个类的实?br />     * 
@param obj 实例
     * 
@param cls c?br />     * @return 如果 obj 是此cȝ实例Q则q回 true
     
*/
    
public boolean isInstance(Object obj, Class cls) {
        
return cls.isInstance(obj);
    }
    
    
/**
     * 得到数组中的某个元素
     * 
@param array 数组
     * 
@param index 索引
     * 
@return q回指定数组对象中烦引组件的?br />     */
    
public Object getByArray(Object array, int index) {
        
return Array.get(array,index);
    }
}


fish的Blog 2006-08-25 08:05 发表评论
]]>
日历?-案例 (转蝲)http://www.aygfsteel.com/yjj317/articles/65658.htmlfish的Blogfish的BlogThu, 24 Aug 2006 23:46:00 GMThttp://www.aygfsteel.com/yjj317/articles/65658.htmlhttp://www.aygfsteel.com/yjj317/comments/65658.htmlhttp://www.aygfsteel.com/yjj317/articles/65658.html#Feedback0http://www.aygfsteel.com/yjj317/comments/commentRss/65658.htmlhttp://www.aygfsteel.com/yjj317/services/trackbacks/65658.html 本实例演C?/span> util 包中c?/span> Calendar 的?/span>

Clendar cL一U日期处理类 , 可以惛_它是一个挂在墙壁上的典型日?/span> , 有许多日期和|阅 .

1.       Clendar cȝ变量域的概念 . 每个元素都是?/span> , q且q些域在 Clendar cM表现为静态变?/span> . q些变量?/span> , 可能通过 get/set cL法获得或者设|域?/span> .

[Calendardemo.java 代码 ]:

import java.util.*;

 

public class Calendardemo {

 

       public static void main(String[] args) {

 

              // 创徏一个日历对?/span>

              Calendar calendar = Calendar.getInstance();

              // 用当前时间初始化日历对象

              calendar.setTime(new Date());

              String year = String.valueOf(calendar.get(Calendar.YEAR));

              String month = String.valueOf(calendar.get(Calendar.MONTH) + 1);

              String date = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));

              String day = String.valueOf(calendar.get(Calendar.DAY_OF_WEEK) - 1);

 

              int hour = calendar.get(Calendar.HOUR);// ?/span> 12 时?/span>

              int hour_1 = calendar.get(Calendar.HOUR_OF_DAY);// ?/span> 24 时?/span>

              int minute = calendar.get(Calendar.MINUTE);

              int second = calendar.get(Calendar.SECOND);

              // 输出l果

              System.out.println("year=  " + year);

              System.out.println("month=  " + month);

              System.out.println("date=  " + date);

              System.out.println("day=  " + day);

              System.out.println("hour=  " + hour);

              System.out.println("hour1=  " + hour_1);

              System.out.println("minute=  " + minute);

              System.out.println("second=  " + second);

              System.out.println(" 现在旉是: ");

              System.out.println(" " + year + " q?/span> " + month + " ?/span> " + date + " 星期 " + day);

 

              calendar.set(1983, 7, 21);// 日历翻到某个时_ 7 表示八月

              long time1983 = calendar.getTimeInMillis();// q回当前旉Q作Z开始时间的 UTC 毫秒?/span>

              calendar.setTime(new Date());// 日历翻到现在这个时_

              long time2006 = calendar.getTimeInMillis();

              long interdays = (time2006 - time1983) / (1000 * 60 * 60 * 24);

              System.out.println(" 现在?/span> 1983.8.21 盔R " + interdays + " ?/span> ");

       }

 

}

 

注意 : 应该以静态方式访问静态字D?/span> Calendar.year

Image00004.jpg
q行l果
:

Image00005.jpg



fish的Blog 2006-08-25 07:46 发表评论
]]>
վ֩ģ壺 | | | ³| | | | | ʯ| | | | ǡ| | | | | | ƽ˳| | | | | ѳ| ɽ| | ͼʲ| | ²| | | | ʲ| | Ϫ| ǭ| | ʡ| | | կ|