Spring
¿ò¼Ü 4 Ö§³Ö Java 8 ÓïÑÔºÍ API ¹¦ÄÜ¡£ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«Öصã·ÅÔÚ Spring 4 Ö§³ÖеÄ
Java 8 µÄ¹¦ÄÜ¡£×îÖØÒªµÄÊÇ Lambda ±í´ïʽ£¬·½·¨ÒýÓã¬JSR-310 µÄÈÕÆÚºÍʱ¼ä£¬ºÍ¿ÉÖØ¸´×¢ÊÍ¡£
Lambda ±í´ïʽ
Spring µÄ´úÂë¿âʹÓÃÁË Java 8 ´óÁ¿µÄº¯Êýʽ½Ó¿Ú£¬Lambda
±í´ïʽ¿ÉÒÔÓÃÀ´±àд¸ü¸É¾»ºÍ½ô´ÕµÄ´úÂ롣ÿµ±³öÏÖº¯Êýʽ½Ó¿ÚµÄ¶ÔÏóµÄÔ¤ÆÚʱÎÒÃDZã¿ÉÒÔÌṩһ¸ö Lambda
±í´ïʽ¡£ÈÃÎÒÃǽøÒ»²½¼ÌÐøÖ®Ç°Ê×ÏÈѧϰº¯Êýʽ½Ó¿Ú¡£ º¯Êýʽ½Ó¿Ú
Óе¥Ò»³éÏó·½·¨µÄ½Ó¿Ú±»³ÆÎªº¯Êýʽ½Ó¿Ú¡£ÏÂÃæÊÇ
JDK Öк¯Êýʽ½Ó¿ÚµÄһЩÀý×Ó£º



Comparator Êǽö¾ßÓÐÒ»¸ö³éÏóµÄ·Ç¶ÔÏó·½·¨µÄº¯Êý¡£¾¡¹ÜÉùÃ÷ÁËÁ½¸ö³éÏó·½·¨£¬ÒòΪ
equals ÊǶÔÓ¦ÓÚ¶ÔÏóµÄ¹«¹²·½·¨ËùÒÔ´Ó¼ÆÊýÀïÅųýÁË¡£ÆäÖÐÓÐÒ»¸ö¶ÔÏóÀà·½·¨ÇÒûÓзǶÔÏó·½·¨µÄ½Ó¿Ú²¢²»ÊǺ¯Êýʽ½Ó¿Ú¡£

Ò»¸ö½Ó¿ÚÈç¹ûÓÐÒ»¸ö³éÏóµÄ·Ç¶ÔÏóÀà·½·¨²¢ÇÒÀ©Õ¹×Ô¾ßÓÐΨһ¶ÔÏóÀà·½·¨µÄ·Çº¯Êýʽ½Ó¿Ú£¬Ôò³ÆÎªº¯Êýʽ½Ó¿Ú¡£

Spring ¿ò¼ÜµÄº¯Êýʽ½Ó¿ÚµÄÀý×Ó£º


@FunctionalInterface ×¢½â¿ÉÒÔÔÚ½Ó¿ÚÉùÃ÷µÄ¶¥²¿ÉùÃ÷Öб»Ê¹Ó㬵«Õâ²¢²»ÊDZØÐèµÄ¡£´Ë×¢½âÓÃÓÚÓɱàÒëÆ÷À´¼ì²â¸Ã½Ó¿ÚÊDz»ÊÇÓÐЧµÄº¯Êýʽ½Ó¿Ú¡£Èç¹ûÎÒÃÇÊÔͼÔÚ½Ó¿ÚÀﶨÒå¶à¸öµ¥Ò»³éÏó·½·¨£¬±àÒëÆ÷½«Å׳öÒ»¸ö´íÎó¡£


º¯ÊýÃèÊö·û
½Ó¿ÚµÄº¯ÊýÃèÊö·ûÊǸýӿڵÄÒ»¸ö³éÏó·½·¨µÄ·½·¨µÄÀàÐÍ¡£¸Ã·½·¨ÀàÐͰüÀ¨²ÎÊýÀàÐÍ£¬·µ»ØÀàÐͺÍ
throws ×Ӿ䡣
Àý:
interface A { void foo() throws IOException; } interface B void foo() throws EOFException; } interface AB extends A, B {} |
interface X {List<String> bar(List<String> arg) throws IOException, SQLTransientException;} interface Y {List bar(List<String> arg) throws EOFException, SQLException;} interface Z extends X, Y {} |
ÈçºÎ±àд Lambda
±í´ïʽ
Lambda ±í´ïʽµÄÓï·¨¿ÉÒÔ²ð·Ö³ÉÈý²¿·Ö£º
* Ò»¸ö¼ýÍ· (¨C>)
* ²ÎÊýÁбí:
Ò»¸ö Lambda ±í´ïʽ¿ÉÒÔ°üº¬0¸ö»ò¶à¸ö²ÎÊý
Àý:
() ¡ú { System.out.println(¡° No arguments¡±) } ; |
(String arg) ¡ú { System.out.println(¡° One argument : ¡±+arg); } |
(String
arg1, Integer arg2) ¡ú { System.out.println(¡°Two
arguments : ¡±+arg1+¡± and ¡±+arg2); } |
* ±í´ïʽÌå:
¿ÉÒÔÊǵ¥¸ö±í´ïʽ»ò´úÂë¿é¡£µ¥¸ö±í´ïʽ½«±»¼òµ¥µØÇóÖµ²¢·µ»Ø¡£
Àý: (String arg) ¡ú { System.out.println(¡° One argument
: ¡±+arg); }
Èç¹û±í´ïʽÌ壨Body£©ÖдæÔÚÓï¾ä¿é£¬ÄÇôËü½«±»Åж¨Îª·½·¨Ì壬²¢ÇÒÔÚ¿éÖ´ÐкóÒþ²ØµÄ·µ»ØÓï¾ä½«¿ØÖÆÈ¨½»¸øµ÷ÓÃÕß¡£
ÏÖÔÚÎÒÃÇ¿´Ò»ÏÂÈçºÎʹÓà Lambda ±í´ïʽ£º
Àý1£º
// ʹÓà Lambda ±í´ïʽ

Àý2£º
//ʹÓà Lambda ±í´ïʽ

Äã¿ÉÒÔͨ¹ý Spring µÄ»Øµ÷º¯ÊýʹÓà Lambda ±í´ïʽ¡£ÀýÈ磬ÓÃÒ»¸ö
ConnectionCallback ¼ìË÷¸ø¶¨ JDBC Á¬½ÓµÄÁÐ±í£¬¿Éд³ÉÈçÏÂÓï¾ä£º
jdbcTemplate.execute(connection -> connection.getCatalog()) |
·½·¨ÒýÓÃ
º¯Êýʽ½Ó¿ÚÒ²¿ÉÒÔʹÓ÷½·¨ÒýÓÃÀ´ÊµÏÖ£¬ÒýÓ÷½·¨»ò¹¹Ô캯Êýµ«²¢²»µ÷ÓÃËüÃÇ¡£·½·¨ÒýÓúÍ
Lambda ±í´ïʽÊÇÀàËÆµÄ£¬µ«·½·¨ÒýÓÃÊÇÖ¸ÏÖÓÐÀàµÄ·½·¨£¬¶ø Lambda ¶¨ÒåÁËÒ»¸öÄäÃû·½·¨£¬²¢½«Æä×÷Ϊº¯Êýʽ½Ó¿ÚµÄʵÀý¡£
ÔÚ Java 8 ÖÐÒ»¸öÐÂÔö°üÖаüº¬Á˳£ÓÃÓÚ Lambda ±í´ïʽºÍ·½·¨ÒýÓõĺ¯Êýʽ½Ó¿Ú£ºjava.util.function¡£
Date Time API
ÔÚ Java ÖÐÏÖÓÐµÄ Date ºÍ Time Àà´æÔÚ¶à¸öÎÊÌâ¡£Date
ºÍ Calendar ÀàµÄ×î´óÎÊÌâÖ®Ò»ÊÇËüÃDz»ÊÇḬ̈߳²È«µÄ¡£ÔÚ±àдÈÕÆÚ´¦Àí´úÂëʱ¿ª·¢ÈËÔ±²»µÃ²»ÌرðСÐIJ¢·¢ÎÊÌâ¡£Date
ÀàÒ²²»Ö§³Ö¹ú¼Ê»¯£¬Òò´Ë²»Ö§³ÖÊ±Çø¡£¿ª·¢ÈËÔ±±ØÐë±àд´óÁ¿µÄ´úÂëÀ´Ö§³Ö²»Í¬µÄÊ±Çø¡£
Date ºÍ Time ÀàÒ²ÏÔÏÖ³ö²»¼ÑµÄ API Éè¼Æ¡£java.util.Date
ÖеÄÔ´Ó0£¬ÈÕ´Ó1£¬Äê´Ó1900¿ªÊ¼¡£È±ÉÙÒ»ÖÂÐÔ¡£ÏÖÔÚÕâЩÓë Date ºÍ Time ÀàµÄÆäËü¼¸¸öÎÊÌâÔÚ
Java 8 ÖеÄРDate ºÍ Time API ÖÐÒѽâ¾ö¡£
ÔÚ java.time °üÏÂÐ嵀 Date ºÍ Time API µÄÖØÒªµÄÀàÊÇ
LocalDate£¬LocalTime ºÍ ZonedDateTime¡£ LocalDate
ºÍ LocalTime
LocalDate ±íʾÈÕÆÚʱµÄĬÈϸñʽΪ YYYY-MM-DD£¬²¢Ã»ÓÐʱ¼ä¡£ÕâÊÇÒ»¸ö²»¿É±äÀà¡£ÎÒÃÇ¿ÉÒÔʹÓÃ
now() ·½·¨»ñµÃµÄµ±Ç°ÈÕÆÚ¡£
н¨ LocalDate ʵÀýµÄÀý×Ó£º
//»ñÈ¡µ±Ç°ÈÕÆÚ

ÎÒÃÇÒ²¿ÉÒÔͨ¹ý¶ÔÄ꣬Ô£¬ÈÕµÄÊäÈë²ÎÊýÀ´Ð½¨ LocalDate ʵÀý¡£
// 2016Äê4ÔÂ1ÈÕ

LocalTime ±íʾÎÞÈÕÆÚµÄʱ¼ä£¬ÊDz»±äµÄ¡£Ê±¼äµÄĬÈϸñʽΪ hh:mm:ss.zzz¡£
н¨ LocalTime ʵÀýµÄÀý×Ó£º
//»ñÈ¡µ±Ç°Ê±¼ä
// 18:30:30

ĬÈÏÇé¿öÏ£¬LocalDate ºÍ LocalTime ÀàʹÓÃĬÈÏÊ±ÇøµÄϵͳʱÖÓ¡£ÕâЩÀ໹ÌṩÁËͨ¹ýÖØÔØ
new() ·½·¨¶ÔÐÞ¸ÄÊ±ÇøµÄÖ§³Ö¡£¿ÉÒÔͨ¹ý´«µÝ zoneid À´»ñµÃÒ»¸öÌØ¶¨Ê±ÇøÖеÄÈÕÆÚ¡£
Àý×Ó£º
// µ±Ç°±¾µØÈÕÆÚ¼Ó¶û¸÷´ð£¨Ó¡¶È£©

´ËÍ⣬»¹ÓÐÒ»¸öÀ࣬LocalDateTime ×éºÏÁËÈÕÆÚºÍʱ¼ä£¬Ä¬ÈϸñʽΪ
yyyy-MM-ddTHH:MM:ss.zzz¡¤¡£
//µ±Ç°ÈÕÆÚºÍʱ¼ä

// 2016-04-01 13:30

ZonedDateTime
ÕâÊÇÒ»¸ö²»¿É±äµÄÀ࣬ÓÃÓÚ±íʾ°üÀ¨Ê±ÇøÐÅÏ¢µÄÈÕÆÚºÍʱ¼ä¡£ÎÒÃÇ¿ÉÒÔʹÓÃÕâ¸öÀàµÄÒ»¸öʵÀýÀ´±íÊ¾ÌØ¶¨Ê¼þ£¬ÈçÔÚÊÀ½çµÄijЩµØÇøÒ»¸ö»áÒé¡£
// µ±Ç°Ê±¼äʹÓÃϵͳµÄʱ¼äºÍĬÈÏÇøÓò


// µ±Ç°Ê±¼äʹÓÃÌØ¶¨Ê±ÇøµÄϵͳʱÖÓ

Spring 4 ÌṩÁËÒ»¸öת»»¿ò¼Ü£¬Ö§³Ö×öΪ Java 8 ÈÕÆÚºÍʱ¼ä
API Ò»²¿·ÖµÄËùÓÐÀà¡£Spring 4 ¿ÉÒÔʹÓÃÒ»¸ö 2016-9-10 µÄ×Ö·û´®£¬²¢°ÑËüת»»³É Java
8 LocalDate µÄÒ»¸öʵÀý¡£Spring 4 »¹Ö§³Öͨ¹ý @DateTimeFormat ×¢½â¸ñʽ»¯
Java 8 Date-Time ×ֶΡ£@DateTimeFormat ÉùÃ÷Ò»¸ö×Ö¶ÎÓ¦¸Ã¸ñʽ»¯ÎªÈÕÆÚʱ¼ä¡£
ÖØ¸´×¢½â
ÔÚ Java 8 ֮ǰ£¬½«ÏàͬÀàÐ͵Ķà¸ö×¢Êͼӵ½ÉùÃ÷»òÀàÐÍ£¨ÀýÈçÒ»¸öÀà»ò·½·¨£©ÖÐÊDz»ÔÊÐíµÄ¡£×÷ΪһÖÖ±äͨ·½·¨£¬¿ª·¢ÈËÔ±²»µÃ²»½«ËüÃÇ×éºÏÔÚÒ»Æð³ÉΪµ¥¸öÈÝÆ÷×¢½â¡£
Àý£º

ÖØ¸´×¢½âÔÊÐíÎÒÃÇÖØÐ´ÏàͬµÄ´úÂë²¢²»ÐèÏÔʽµØÊ¹ÓÃÈÝÆ÷×¢½â¡£ËäÈ»ÈÝÆ÷×¢½âûÓÐÔÚÕâÀïʹÓõģ¬Java
±àÒëÆ÷¸ºÔð½«Á½¸ö×¢½â·â×°³ÉÒ»¸öÈÝÆ÷£º
Àý£º

¶¨ÒåÖØ¸´×¢½â
¶¨ÒåÒ»¸öÖØ¸´×¢½â£¬Í¨¹ý¿ÉÖØ¸´Ê¹ÓÃµÄ @Repeatable ×¢½âÀ´½øÐбê×¢£¬»ò´´½¨Ò»¸ö¾ßÓÐÖØ¸´×¢½âÀàÐÍϵÁÐÊôÐÔµÄ×¢½â¡£
µÚ1²½£ºÉùÃ÷ÖØ¸´×¢½âÀàÐÍ£º

µÚ2²½£ºÉùÃ÷ÈÝÆ÷×¢½âÀàÐÍ¡£

È«²¿µÄʵÏÖÈçÏÂËùʾ£º

ΪÁË»ñµÃÔÚÔËÐÐʱµÄ×¢½âÐÅÏ¢£¬Í¨¹ý @Retention(RetentionPolicy.RUNTIME)
×¢Êͼ´¿É¡£ ¼ìË÷×¢½â
getAnnotationsByType() »ò getDeclaredAnnotationsByType()
ÊÇÓÃÓÚ·ÃÎÊ×¢½â·´Éä API ÖеÄз½·¨¡£
×¢½â»¹¿ÉÒÔͨ¹ýËüÃǵÄÈÝÆ÷×¢½âÓà getAnnotation() »ò getDeclaredAnnotation()
½øÐзÃÎÊ¡£ ½áÂÛ
Spring 4 »¹¿ÉÔËÐÐÔÚ Java 6 ºÍ Java 7 ÖС£ÓÉÓÚ
Spring ʹÓÃÁ˺ܶàµÄº¯Êýʽ½Ó¿Ú£¬Óà Java 8 ºÍ Spring 4£¬Ä㽫Äܹ»Ê¹Óà Lambda
±í´ïʽºÍº¯Êýʽ½Ó¿Ú£¬²¢¿Éд³ö¸ü¸É¾»¡¢½ô´ÕµÄ´úÂë¡£
Ð嵀 Date ºÍ Time API ½â¾öÁË java.Util.Date
ÀàÖг¤ÆÚ´æÔÚµÄÎÊÌ⣬²¢ÒýÈëÁËÏñ LocalDate£¬LocalTime µÈÐí¶àÐÂÀ࣬ʹÈÕÆÚºÍʱ¼äµÄ±à³Ì±äµÃ¸üÓÐÒâ˼ÁË¡£ÄãÒѾ²ÉÓÃ
Java 8 + Spring 4 ÁËÂð£¿ÇëÔÚ Twitter ÉÏ @MyEclipseIDE »òÔÚMyEclipse
ÂÛ̳¸úÎÒÃÇ·ÖÏíÄúµÄ·´À¡¡£
Ö÷Ì⣺º¯Êýʽ½Ó¿Ú£¬Lambda ±í´ïʽ£¬JAVA 8£¬JAVA£¬Spring
4
ÔÎÄÁ´½Ó£ºhttps://dzone.com/articles/java-8-features-supported-by-spring-4
|