ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品一线,亚洲欧美一区二区三区四区 ,国产乱妇乱子在线播视频播放网站http://www.aygfsteel.com/51AOP/category/10477.htmlå…Ïx³¨SoAå‘展zh-cnTue, 27 Feb 2007 12:31:36 GMTTue, 27 Feb 2007 12:31:36 GMT60Spring in Action ½W”è®° (IV) -- i18n问题和自定义属性编辑器http://www.aygfsteel.com/51AOP/archive/2006/05/29/48700.html冰雨冰雨Mon, 29 May 2006 03:24:00 GMThttp://www.aygfsteel.com/51AOP/archive/2006/05/29/48700.htmlhttp://www.aygfsteel.com/51AOP/comments/48700.htmlhttp://www.aygfsteel.com/51AOP/archive/2006/05/29/48700.html#Feedback0http://www.aygfsteel.com/51AOP/comments/commentRss/48700.htmlhttp://www.aygfsteel.com/51AOP/services/trackbacks/48700.htmlSpring in Action ½W”记 (IV) -- i18n问题和自定义属性编辑器

  BY: icess Blog: http://blog.matrix.org.cn/page/icess 

   在Spring中处ç†I18N问题和ä‹É用Java里é¢çš„类基本上是一æ ïLš„.使用org.springframework.context.support.ResourceBundleMessageSource

ç„¶åŽæ³¨å…¥èµ„æºæ–‡äšg(一个å字䨓basename的属æ€?,然厞®±å¯ä»¥åœ¨Context中ä‹Éç”¨èµ„æºæ–‡ä»¶äº†, 如下ä¸ÞZ¸€ä¸ªé…¾|®ç¤ºä¾? test.xml

<?

xml version = "1.0" encoding = "UTF-8" ?>

<!

DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd" >

<

beans >

< bean id = "messageSource" class = "org.springframework.context.support.ResourceBundleMessageSource" >

< property name = "basename" >

<!-- æ³¨æ„æ­¤å¤„讄¡½® èµ„æº åå­— å’Œèµ\å¾?-->

< value > test/i18n/test </ value >

</ property >

</ bean >

</

beans >

下é¢ä¸ø™µ„æºæ–‡ä»?test.properties

name =

\u51B0\u96E8

sex =

\u5148\u751F

test_zh.properties

name =

\u51B0\u96E8

sex =

\u5148\u751F

test_en_US.properties

name =

ice rain

sex =

male

䏋颿˜¯ä¸€ä¸ªç®€å•çš„‹¹‹è¯•¾c?

package

test.i18n;

import

java.util.Locale;

import

org.springframework.context.ApplicationContext;

import

org.springframework.context.support.ClassPathXmlApplicationContext;

public

class TestI18n {

/**

* @param args

*/

  public static void main(String[] args) {

    // TODO Auto-generated method stub

    ApplicationContext context =

new ClassPathXmlApplicationContext( "test/i18n/test.xml" );

    String text = context.getMessage(

"sex" , new Object[0], Locale. US );

    String textZH = context.getMessage(

"sex" , new Object[0], Locale. CHINA );

    System.

out .println(text + " 中文:" +textZH);

  }

}

很简å?˜q™æ ·ž®±å¯ä»¥äº†.

䏋颿¥çœ‹çœ‹Spring中的属性自定义¾~–辑å™?˜q™ä¸ªå’ŒHibernate中的自定义属性差ä¸å¤š çš? 例如䏋颿ˆ‘们è¦çœ‹åˆîCº†ä¾‹å­,映射一个电è¯å·ç ?æœ?font size="2">areaCode,prefixå’?number, 如果ä¸ä‹É用自定义属性编辑器那么ž®Þp¦åˆ†åˆ«æ³¨å…¥ä¸Šé¢çš?个代ç ?éºÈƒ¦. 如果使用自定义属性编辑器,直接注入一ä¸?分开的数字åºåˆ—å°±å¯ä»¥äº?å¦?/p>

888-666-9999

.在下é¢çš„例å­ä¸­çš„Contact.java¾cÀLœ‰ä¸ªPhoneNumber属æ€?里é¢ä¿å­˜äº†ä¸Šé¢çš„3个代ç ?两个¾cÈš„代ç å¦‚下:

package  test.propertyEditor;

public class  Contact {
   private  PhoneNumber phoneNumber;
   private  String name;
  
   public  Contact() {}
  
   public  String getName() {
     return  name;
   }

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

   public  PhoneNumber getPhoneNumber() {
     return  phoneNumber;
   }

   public void  setPhoneNumber(PhoneNumber phoneNumber) {
     this .phoneNumber = phoneNumber;
   }
  
}

PhoneNumber.java

package  test.propertyEditor;

public class  PhoneNumber {
   private  String areaCode;
   private  String prefix;
   private  String number;
   public  PhoneNumber() {
    
   }
   public  PhoneNumber(String areaCode,String prefix,String number) {
     this .areaCode = areaCode;
     this .prefix = prefix;
     this .number = number;
   }
   public  String getAreaCode() {
     return  areaCode;
   }
   public void  setAreaCode(String areaCode) {
     this .areaCode = areaCode;
   }
   public  String getNumber() {
     return  number;
   }
   public void  setNumber(String number) {
     this .number = number;
   }
   public  String getPrefix() {
     return  prefix;
   }
   public void  setPrefix(String prefix) {
     this .prefix = prefix;
   }
}

ç„¶åŽå®šä¹‰ä¸€ä¸ªç”¨æ¥ç¼–辑PhoneNumber的编辑器PhoneEditor.java 如下:

package  test.propertyEditor;

import  java.beans.PropertyEditorSupport;

public class  PhoneEditor  extends  PropertyEditorSupport {
   public void  setAsText(String textValue) {
     String stripped = stripNonNumber(textValue);
    
     String areaCode = stripped.substring( 0 , 3 );
     String prefix = stripped.substring( 3 , 6 );
     String number = stripped.substring( 6 );
     PhoneNumber phone =  new  PhoneNumber(areaCode,prefix,number);
    
     setValue(phone);
   }
  
   private  String stripNonNumber(String original) {
     StringBuilder allNumeric =  new  StringBuilder();
    
     for ( int  i =  0 ; i < original.length(); i ++) {
       char  c = original.charAt(i);
       if (Character.isDigit(c)) {
         allNumeric.append(c);
       }
     }
     return  allNumeric.toString();
   }
}

¾l§æ‰¿java里é¢çš„属性编辑器,实现里é¢çš„一个方法就å¯ä»¥äº? 下颞®±æ˜¯åœ¨é…¾|®æ–‡ä»¶ä¸­æ³¨å†Œè¯¥ç¼–辑器.如下:

testPropertyEditor.xml

<?

xml version = "1.0" encoding = "UTF-8" ?>

<!

DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd" >

<

beans >

< bean id = "customEditorConfigurer" class = "org.springframework.beans.factory.config.CustomEditorConfigurer" >

< property name = "customEditors" >

< map >

< entry key = "test.propertyEditor.PhoneNumber" >

< bean id = "phoneEditor" class = "test.propertyEditor.PhoneEditor" ></ bean >

</ entry >

</ map >

</ property >

</ bean >

<!-- å¦‚æžœä¸æ³¨å†Œä¸Šé¢è‡ªå®šä¹‰Editor的实çŽ? éœ€è¦æ³¨å†Œä¸€ä¸ªPhoneNumberçš„bean,讄¡½®å…¶å±žæ€§ç„¶åŽå†æ³¨å†Œ

Contact的PhoneNumber的属�/p>

-->

< bean id = "contact" class = "test.propertyEditor.Contact" >

< property name = "phoneNumber" >

< value > 888-666-9999 </ value >

</ property >

</ bean >

</

beans >

æœ€åŽæ¥‹¹‹è¯•一下注册的¾l“æžœæ˜¯å¦æ­£ç¡®:

package  test.propertyEditor;

import  org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;

public class  TestPropertyEditor {

   /**
    *  @param  args
    */
   public static void  main(String[] args) {
     // TODO Auto-generated method stub
     ApplicationContext context =  new  ClassPathXmlApplicationContext( "test/propertyEditor/testPropertyEditor.xml" );
     Contact c = (Contact) context.getBean( "contact" );
    
     System.out.println(c.getPhoneNumber().getAreaCode());
     System.out.println(c.getPhoneNumber().getPrefix());
     System.out.println(c.getPhoneNumber().getNumber());
   }

}

ok, 很简å?下一‹Æ¡æ¥çœ‹çœ‹,Springæä¾›çš„ä¸€ä¸‹æ¯”è¾ƒæœ‰æ„æ€çš„功能.如定æ—?å‘é€Email½{?



冰雨 2006-05-29 11:24 å‘表评论
]]>
Spring in Action ½W”è®°(III) -- 在Spring下的Hibernateæ•°æ®æ“作 http://www.aygfsteel.com/51AOP/archive/2006/05/27/48456.html冰雨冰雨Sat, 27 May 2006 03:01:00 GMThttp://www.aygfsteel.com/51AOP/archive/2006/05/27/48456.htmlhttp://www.aygfsteel.com/51AOP/comments/48456.htmlhttp://www.aygfsteel.com/51AOP/archive/2006/05/27/48456.html#Feedback0http://www.aygfsteel.com/51AOP/comments/commentRss/48456.htmlhttp://www.aygfsteel.com/51AOP/services/trackbacks/48456.html  

Spring in Action ½W”è®°(III)

By: icess blog: http://blog.matrix.org.cn/page/icess

˜q™æ¬¡æ¥çœ‹çœ‹ä‹É用Springçš„Hibernateæ¨¡æ¿æ¥æ“作数æ? Springæä¾›äº†Hibernate的一层包è£?使Hibernate使用èµäh¥æ›´åŠ æ–¹ä¾¿,ž®¤å…¶æ˜¯ç»“åˆHibernate Annotationæ—? é…置文äšgæ›´å°‘,¾l´æŠ¤æ›´åŠ ½Ž€å? 䏋颿¥çœ‹çœ‹å§.

䏋颿˜¯ä¸€ä¸ªæµ‹è¯•æ•°æ®å®žä½“ç±»TestData.java å’Œå‰ä¸€½‹‡æåˆ°çš„实体¾cÖM¸€æ ?åªä¸˜q‡ç”¨äº†Annotation注释. 

package  test.orm.hibernate.model;

import  javax.persistence.Basic;
import  javax.persistence.Entity;
import  javax.persistence.Id;
import  javax.persistence.Table;


@Entity
@Table(name =  "test" ,schema =  "APP" )
public class  TestData {
   private int  id;
   private  String name;
   public  TestData( int  id, String name) {
     this .id = id;
     this .name = name;
   }
   public  TestData() {}
  
   @Id
   public int  getId() {
     return  id;
   }
   public void  setId( int  id) {
     this .id = id;
   }
   @Basic
   public  String getName() {
     return  name;
   }
   public void  setName(String name) {
     this .name = name;
   }
}

䏋颿˜¯æµ‹è¯•Hibernate模æ¿çš„ç±», TestHibernateTemplate.java

package  test.orm.hibernate;

import  java.sql.SQLException;

import  org.hibernate.HibernateException;
import  org.hibernate.Session;
import  org.springframework.orm.hibernate3.HibernateCallback;
import  org.springframework.orm.hibernate3.HibernateTemplate;

import  test.orm.hibernate.model.TestData;


public class  TestHibernateTemplate {
   private  HibernateTemplate hibernateTemplate;
  
   public  TestHibernateTemplate() {}

   public  HibernateTemplate getHibernateTemplate() {
     return  hibernateTemplate;
   }

   public void  setHibernateTemplate(HibernateTemplate hibernateTemplate) {
     this .hibernateTemplate = hibernateTemplate;
   }
  
   //‹¹‹è¯•使用HibernateTemplateæ¥æ“作数æ?/font>
   public  TestData getTestData( final int  id) {
     return  (TestData) hibernateTemplate.execute( new  HibernateCallback() {

       public  Object doInHibernate(Session s)  throws  HibernateException, SQLException {
         // TODO Auto-generated method stub
         return  s.get(TestData.class, id);
       }
      
     });
   }
//Â Â ä¸Šé¢æŸ¥è¯¢æ•°æ®çš„æ–¹æ³• ä‹É用了HibernateCallBack接å£,对于˜q™æ ·½Ž€å•的查询,å¯ä»¥ä½¿ç”¨ä¸‹é¢ç”±HibernateTemplate æä¾›çš„æ›´½Ž€å•çš„æ–ÒŽ³•
   public  TestData getTestData2( final int  id) {
     return  (TestData) hibernateTemplate.get(TestData.class, id);
   }
   /* 如果上é¢çš„两处方法ä‹É用Load æ–ÒŽ³•的时, 抛出延迟加è²å±žæ€§å¼‚å¸? Spring½Ž¡ç†Session的问é¢? 应该是Spring用完Session 然厞®±å…³é—­äº†,
    * 所以ä¸å¯ä»¥å»¶è¿ŸåŠ è², 也就ä¸å¯ä»¥ä‹É用load æ–ÒŽ³•äº?,????? ä¸ÞZ»€ä¹????*/
  
   // 其他æ“ä½œæ•°æ®æ–ÒŽ³• å¦? æ’å…¥,修改.... 和ä‹É用Hibernate session 差ä¸å¤? HibernateTemplateåªæ˜¯Session的包è£?/font>
}

å¯ä»¥çœ‹åˆ°ä½¿ç”¨Hibernateæ¨¡æ¿æ¥æ“作数æ?是多么简å?

注æ„: ä¸Šé¢æ³¨é‡Šä¸?æåˆ°äº†åœ¨ä½¿ç”¨Loadæ–ÒŽ³•æ—¶å€?会有问题, Session in view 时候ä‹É用load是ä¸ä¼šå‡ºé—®é¢˜çš? ˜q™é‡ŒSpringæä¾›çš„æ–¹æ³•应该是按照Hibernate的语义写的å§.

下颞®±æ˜¯ç”¨æ¥‹¹‹è¯•上é¢çš„ç±»æ˜¯å¦æ­£å¸¸å·¥ä½œçš„æµ‹è¯•ç±»äº?TestApp.java

package  test.orm.hibernate;

import  org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;

import  test.jdbc.DatabaseUtils;
import  test.orm.hibernate.model.TestData;

public class  TestApp {

   /**
    *  @param  args
    */
   public static void  main(String[] args) {
     // TODO Auto-generated method stub
     DatabaseUtils dataUtils =  new  DatabaseUtils();
     dataUtils.connect();
     System.out.println( "Open database:!" );
     ApplicationContext context =  new  ClassPathXmlApplicationContext( "test/orm/hibernate/spring-hibernate.xml" );
    
     TestHibernateTemplate hibernateTemplate = (TestHibernateTemplate) context.getBean( "testDao" );
    
     System.out.println( "name : "  );
     TestData data = hibernateTemplate.getTestData( 9 );
     System.out.println( "name : "  + data.getName());
     data = hibernateTemplate.getTestData2( 3 );
     System.out.println( "name 2: "  + data.getName());
    
    
     dataUtils.disconnect();
    
   }

}

 

注æ„: 本测试中用到了上一½‹‡ä‹É用到çš?font color="#000000">DatabaseUtils.java 工具¾cÀL¥æ“作Derbyæ•°æ®åº?

ç”?/span> 以上实例å¯ä»¥çœ‹å‡º,在Spring中ä‹É用Hibernate,效率更高一äº? 你丘q™æ ·è®¤äØ“å?

åŒæ—¶ Spring也æä¾›äº† JDO½{‰å…¶ä»–ä¸€äº›æ•°æ®æ“作框架的包装,使用上基本上 是一æ ïLš„˜q™é‡Œž®×ƒ¸åœ¨è¯¦˜qîCº†.

下一‹Æ¡æˆ‘们æ¥çœ‹çœ‹Springçš„I18N处ç†,和自定义属性编辑器的实çŽ?



]]>
Spring in Action ½W”è®°(II)http://www.aygfsteel.com/51AOP/archive/2006/05/25/47918.html冰雨冰雨Wed, 24 May 2006 16:04:00 GMThttp://www.aygfsteel.com/51AOP/archive/2006/05/25/47918.htmlhttp://www.aygfsteel.com/51AOP/comments/47918.htmlhttp://www.aygfsteel.com/51AOP/archive/2006/05/25/47918.html#Feedback0http://www.aygfsteel.com/51AOP/comments/commentRss/47918.htmlhttp://www.aygfsteel.com/51AOP/services/trackbacks/47918.html阅读全文

]]>
Spring in Action ½W”è®°(I) http://www.aygfsteel.com/51AOP/archive/2006/05/22/47456.html冰雨冰雨Mon, 22 May 2006 06:13:00 GMThttp://www.aygfsteel.com/51AOP/archive/2006/05/22/47456.htmlhttp://www.aygfsteel.com/51AOP/comments/47456.htmlhttp://www.aygfsteel.com/51AOP/archive/2006/05/22/47456.html#Feedback0http://www.aygfsteel.com/51AOP/comments/commentRss/47456.htmlhttp://www.aygfsteel.com/51AOP/services/trackbacks/47456.html

By : icess ,æˆ‘çš„éƒ¨è½æ ?http://blog.matrix.org.cn/page/icess

在考试å‰åŒ†åŒ†çœ‹äº†ä¸€éSpring in Action 也没有记录什ä¹?考试¾l“æŸäº?è¦æŠ“ç´§æ—¶é—´æ•´ç†ä¸€ä¸?è¦ä¸ç„¶å°±å¿˜äº†.^_^:

æ•´ç†ä¸€ä¸‹æˆ‘ç›®å‰å¯èƒ½ä¼šç”¨åˆ°çš„æ¨¡å—, 对于那些现在æ ÒŽœ¬ç”¨ä¸åˆ°çš„冬冬˜q˜æ˜¯½{‰æœ‰æ—‰™—´å†ç ”½I¶å§!

½W¬ä¸€ä¸ªå½“然是最¾l典的HelloWorld äº?, 呵呵,½Ž€å?但是说明了原ç?

定义一个æœåŠ¡æŽ¥å?/p>

package  test.helloworld;

public interface  GreetingService {
   public void  sayGreeting();

}

䏋颿˜¯å…¶å®žçް:

package  test.helloworld;

public class  GreetingServiceImpl  implements  GreetingService {

   private  String greeting;
   public  GreetingServiceImpl() {}
   public  GreetingServiceImpl(String greeting) {
     this .greeting = greeting;
   }
   public void  sayGreeting() {
     //  Auto-generated method stub
     System.out.println(greeting);
   }
  
   public void  setGreeting(String greeting) {
     this .greeting = greeting;
   }

}

然厞®±æ˜¯‹¹‹è¯• IoC 的测试代ç ?

package  test.helloworld;


import  org.springframework.beans.factory.BeanFactory;
import  org.springframework.beans.factory.xml.XmlBeanFactory;
import  org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;
import  org.springframework.core.io.FileSystemResource;

public class  HelloApp {

   /**
    *  @param  args
    */
   public static void  main(String[] args) {
     // TODO Auto-generated method stub
//    BeanFactory factory;
//    factory = new XmlBeanFactory(new FileSystemResource("src/test/helloworld/hello.xml"));
     // 使用ä¸åŒçš„æ–¹æ³•得到bean. (BeanFactory or ApplicationContext)
     ApplicationContext context =  new  ClassPathXmlApplicationContext( "test/helloworld/hello.xml" );
    
    
     GreetingService greetingService = (GreetingService) context.getBean( "greetingService" );
//    GreetingService greetingService = (GreetingService) factory.getBean("greetingService");
     greetingService.sayGreeting();
   }

}

˜q˜æœ‰é‡è¦çš„é…¾|®æ–‡ä»¶å¦‚ä¸?hello.xml

<?

xml version = "1.0" encoding = "UTF-8" ?>

<!

DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd" >

<

beans >

< bean id = "greetingService"

class = "test.helloworld.GreetingServiceImpl" >

< property name = "greeting" >

< value > ice rain ! </ value >

</ property >

</ bean >

</

beans >

呵呵ž®Þp¿™ä¹ˆç®€å?实现äº?greeting 属性的 Ioc.

˜q™æ˜¯Spring 两大基本支柱其一的工作原ç? 关于AoP的内å®?在这里ä¸ä½œè®¨è®?å› äØ“çŽ°åœ¨æˆ‘ä‹É用AoPçš„åœ°æ–¹ä¸æ˜¯å¾ˆå¤?½Ž€å•的应用是很½Ž€å•çš„å•?^_^.

下é¢ä¸€½‹‡æˆ‘们æ¥çœ‹çœ‹ 在spring包装下的jdbc讉K—®. 详细情况也å¯ä»?b>å‚考这é‡?/a>



]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ׿×ÊÏØ| ÆÕ¸ñÏØ| ÂêÇßÏØ| Í­É½ÏØ| ¸»Ô£ÏØ| ¸ö¾ÉÊÐ| ²¨ÃÜÏØ| ³Ê¹±ÏØ| óÞÁ¬ÏØ| ÁéÉ½ÏØ| ÄþÔ¶ÏØ| ¼ªÁÖÊ¡| Ó¯½­ÏØ| É̳ÇÏØ| ¼¦ÔóÏØ| ÈêÄÏÏØ| Á«»¨ÏØ| °²ÈûÏØ| ¸ÓÖÝÊÐ| ÃñÇÚÏØ| ¸·ÑôÊÐ| ºôͼ±ÚÏØ| Æ½ÈªÏØ| ×Þ³ÇÊÐ| ÑγØÏØ| ¼¯°²ÊÐ| æÄÔ´ÏØ| äÒÖÐÏØ| ÆÕ¶ý| ãôºéÏØ| ϼÆÖÏØ| ÁÙëÔÏØ| ºþÄÏÊ¡| Ô­ÑôÏØ| ÏÉÌÒÊÐ| Âܱ±ÏØ| Ð˰²ÃË| µÇúÏØ| ¹ã¶«Ê¡| ÓÒÓñÏØ| кÍÏØ|