±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬±¾ÎÄÖ÷Òª½éÉÜÔÚÏîÄ¿ÖпªÊ¼Ê¹ÓÃspring-frameworkµÄÍÆ¼ö·½·¨ÊÇʹÓÃÒÀÀµ¹ÜÀíϵͳ£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
|
|
1.ΪʲôѧϰSpring?
Ëæ×ŶÔJava EEµÄ²»¶Ï½Ó´¥ºÍÀí½â£¬Äã»á·¢ÏÖSpring ÔÚ¸÷¸öÆóÒµºÍÏîÄ¿Öз¢»Ó×ÅÔ½À´Ô½ÖØÒªµÄ×÷Óá£ÕÆÎÕSpring
ÒѳÉΪÎÒÃÇITÐÐÒµÉú´æ±ØÑ§µÄ±¾ÁìÖ®Ò»¡£
Spring Framework ÊÇÒ»¸ö¿ªÔ´µÄJava£¯Java EEÈ«¹¦ÄÜÕ»£¨full-stack£©µÄÓ¦ÓóÌÐò¿ò¼Ü£¬ÒÔApacheÐí¿ÉÖ¤ÐÎʽ·¢²¼£¬Ò²ÓÐ.NETƽ̨ÉϵÄÒÆÖ²°æ±¾¡£
¸Ã¿ò¼Ü»ùÓÚ Expert One-on-One Java EE Design and Development£¨ISBN
0-7645-4385-7£©Ò»ÊéÖеĴúÂ룬×î³õÓÉRod JohnsonºÍJuergen HoellerµÈ¿ª·¢¡£
Spring FrameworkÌṩÁËÒ»¸ö¼òÒ׵Ŀª·¢·½Ê½£¬ÕâÖÖ¿ª·¢·½Ê½£¬½«±ÜÃâÄÇЩ¿ÉÄÜÖÂʹµ×²ã´úÂë±äµÃ·±ÔÓ»ìÂҵĴóÁ¿µÄÊôÐÔÎļþºÍ°ïÖúÀà¡£
Spring Framework µ±Ç°×îа汾ÊÇSpring Framework 5,µ±Äã´ò¿ª¹ÙÍø£¬ÄãÓ¦¸ÃÄܹ»¿´µ½¹ÙÍøµÄÐû´«Í¼Æ¬

ÕâÀïÓиöÏà¹ØµÄÐÂÎÅÓÐÐËȤ¿ÉÒÔ¿´Ï£¬Ó¢ÎÄÔ°æµØÖ·µã»÷²é¿´
ÖÐÎİæµã»÷²é¿´
¸ù¾Ý¹ÙÍø¶¯Ì¬ºÍÎÒËùÁ˽âµÄÐÅÏ¢À´¿´£¬Spring ¹ÙÍø»¹»á¼ÌÐøÖ§³ÖSpring MVC£¬ÒòΪËü»¹Óкܶà¸Ä½øµÄµØ·½¡£
µ«ÊÇδÀ´µÄÇ÷ÊÆÎÒÈÏΪ±Ø½«ÊÇ Spring Boot+ SpringWeb Flux + Spring
Cloud.
ÄÇôSpring MVC ºÍ Spring Web Flux Á½ÕßÓкÎÇø±ðÄØ£¿
¹ÙÍø¶Ô´Ë¸ø³öÁËÕâÑùÒ»ÕŶԱÈͼ£º

·ÒëϾÍÊÇ£º
Spring MVC»ùÓÚservlet API¹¹½¨£¬²¢Ê¹ÓÃÒ»¸öͬ²½×èÈûI / OÌåϵ½á¹¹ºÍÒ»¸öµ¥Ïß³ÌÇëÇóÏß³ÌÄ£Ð͵ÄWeb
¿ò¼Ü
Spring WebFluxÊÇÒ»¸ö·Ç×èÈûµÄWeb¿ò¼Ü£¬´Ó¸Ã×齨Á¢Æð£¬ÀûÓöàºË£¬ÏÂÒ»´ú´¦ÀíÆ÷ºÍ´óÁ¿²¢·¢Á¬½Ó¡£
×ܽ᣺
Spring MVC ÊÇ»ùÓÚServlet API ¹¹½¨µÄͬ²½×èÈûʽI/O µÄWeb ¿ò¼Ü¡£
Spring WebFlux ÊÇÒ»ÖÖ¸üÓÅÐãµÄ·Ç×èÈûʽWeb¿ò¼Ü£¬¶øÇÒÄܸüºÃ´¦Àí´óÁ¿²¢·¢Á¬½Ó¡£
¿´µ½ÕâÀÏàÐÅ´Ëʱ´ÏÃ÷µÄÄãÓ¦¸ÃÏþµÃΪʲôÎÒ֮ǰ»áÄÇô˵Á˰ɡ£
2. Spring ¹ÙÍø½éÉÜ
Spring ¹ÙÍø£ºhttps://spring.io/
Spring Îĵµ£ºhttps://spring.io/guides
Spring IDE: https://spring.io/tools/sts
Spring Project: https://spring.io/projects
ÏîÄ¿¿ìËÙÉú³ÉÆ÷£ºhttps://start.spring.io/
ÉÏÃæÕâЩÁ´½ÓÏàÐźܶàÈ˶¼ÖªµÀ£¬µ«ÊÇÆäʵÍùÍùÎÒÃDz»ÊǺÜÇå³þʲôʱºòÓÃÄĸöÁ´½Ó¡£
Spring ¹ÙÍø£º ¹Ø×¢Spring ¹ÙÍø¶¯Ì¬£¬×îеÄSpring ¼¼ÊõºÍ°æ±¾·¢²¼¹«¸æ
Spring Îĵµ£º what you want to do ? ÄãÏ뿪·¢Ò»¸öʲôÑùµÄÏîÄ¿£¿¿ÉÒÔÔÚÕâÀï¿ìËÙÕÒµ½Ïà¹Ø½éÉܺÍÎĵµ¡£

Spring IDE: Èç¹ûÄã´òËãÓÃEclipse °æ±¾,ÄÇôÎÒÍÆ¼öÓà ¹ÙÍøÕâ¸öSTS£¬ÒòΪËüÓ¦¸ÃÊÇ×îÓѺÃÖ§³ÖSpringµÄEclipse
°æ±¾¡£µ±È»£¬Èç¹ûÈç¹ûÌõ¼þ¿ÉÒÔ£¬ÎÒ»¹ÊÇÇ¿ÁÒÍÆ¼öÄãʹÓÃIntellij Idea.
Spring Project: ÕâÀïÊǰ´ÕÕÏîĿģ¿é»®·ÖµÄ£¬±ÈÈç ´ÓÅäÖõ½°²È«£¬WebÓ¦ÓóÌÐòµ½´óÊý¾Ý£¬ÏëѧϰÄĸö¾Í°´ÕÕ·ÖÀàȥѧ¼´¿É¡£

ÏîÄ¿Éú³ÉÆ÷£ºÕâÀïÊÇSpring ¹ÙÍøÌṩµÄÒ»¸ö·Ç³£±ãÀûµÄ¹¤¾ß£¬ÐèÒªÄÄЩÒÀÀµ£¬Äĸö°æ±¾£¬ÔÚÕâÀïÅäÖÃÏÂÈ»ºóÏÂÔØ¼´¿É¡£
3. Spring Framework
Spring FrameworkºËÐÄÖ§³ÖÒÀÀµ×¢È룬ÊÂÎñ¹ÜÀí£¬WebÓ¦ÓóÌÐò£¬Êý¾Ý·ÃÎÊ£¬ÏûÏ¢´«µÝ£¬²âÊԺ͸ü¶à
Tips:ÕâÀï½²ÊöµÄÊÇ·Òë https://projects.spring.io/spring-framework/
ÉÏÃæµÄÄÚÈÝ
3.1 ½éÉÜ
Spring¿ò¼ÜΪÏÖ´ú»ùÓÚJavaµÄÆóÒµÓ¦ÓóÌÐòÌṩÁËÒ»¸öÈ«ÃæµÄ±à³ÌºÍÅäÖÃÄ£ÐÍ - ÔÚÈκÎÀàÐ͵IJ¿Êðƽ̨ÉÏ¡£
SpringµÄÒ»¸ö¹Ø¼üÔªËØÊÇÓ¦ÓóÌÐò¼¶±ðµÄ»ù´¡¼Ü¹¹Ö§³Ö£ºSpring×ÅÖØÓÚÆóÒµÓ¦ÓóÌÐòµÄ¡°¹ÜµÀ¡±£¬ÒÔ±ãÍŶӿÉÒÔרעÓÚÓ¦ÓóÌÐò¼¶ÒµÎñÂß¼£¬¶ø²»±ØÓëÌØ¶¨²¿Êð»·¾³Ðγɲ»±ØÒªµÄÁªÏµ¡£
3.2 ¹¦ÄÜÌØµã
ºËÐļ¼Êõ£ºÒÀÀµ×¢È룬ʼþ£¬×ÊÔ´£¬i18n£¬ÑéÖ¤£¬Êý¾Ý°ó¶¨£¬ÀàÐÍת»»£¬SpEL£¬AOP¡£
²âÊÔ£ºÄ£Äâ¶ÔÏó£¬TestContext¿ò¼Ü£¬Spring MVC²âÊÔ£¬WebTestClient¡£
Êý¾Ý·ÃÎÊ£ºÊÂÎñ£¬DAOÖ§³Ö£¬JDBC£¬ORM£¬±à×éXML¡£
Spring MVCºÍSpring WebFlux Web¿ò¼Ü
ÕûºÏ£ºÔ¶³Ì´¦Àí£¬JMS£¬JCA£¬JMX£¬µç×ÓÓʼþ£¬ÈÎÎñ£¬µ÷¶È£¬»º´æ¡£
ÓïÑÔ£ºKotlin£¬Groovy£¬¶¯Ì¬ÓïÑÔ¡£
Tips: ÕâÀï¼ÓÒ»ÕŹÙÍøÎĵµÖеÄÒ»¸ö½ØÍ¼°É£¬ÏàÐÅÓÐÖúÓÚÄã¸üºÃµØÀí½â¡£

3.3 ×îµÍÒªÇó
JDK 8+ for Spring Framework 5.x
JDK 6+ for Spring Framework 4.x
JDK 5+ for Spring Framework 3.x
Tips: ËùÒÔÄãµÄµçÄÔÏÖÔÚÍÆ¼öʹÓà JDK1.8+
3.4 ¿ìËÙ¿ªÊ¼
ÔÚÏîÄ¿ÖпªÊ¼Ê¹ÓÃspring-frameworkµÄÍÆ¼ö·½·¨ÊÇʹÓÃÒÀÀµ¹ÜÀíϵͳ - ÏÂÃæµÄ´úÂëÆ¬¶Î¿ÉÒÔ¸´ÖƲ¢Õ³Ìùµ½ÄúµÄ¹¹½¨ÖС£
ÐèÒª°ï棿 Çë²ÎÔÄÎÒÃÇÓйØÊ¹Óà MavenºÍ Gradle ¹¹½¨µÄÈëÃÅÖ¸ÄÏ¡£
Æäʵ²»Ö¹Spring ¹ÙÍøÎÒÃÇÈç½ñµÄ¸÷´ó¹«Ë¾Ó¦¸Ã´ó¶àÊýÒ²ÍÆ¼öÎÒÃÇÊÇÓÃMavenºÍGradle À´¹ÜÀíÏîÄ¿Jar°üÒÀÀµ¡£
Èç¹ûÄãʹÓõÄMaven:
<dependencies>
<dependency> <groupId>org.springframework</groupId>
<artifactId> spring-context</artifactId>
<version>5.1.0.BUILD-SNAPSHOT</version>
</dependency>
</dependencies><repositories>
<repository> <id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot</url>
<snapshots> <enabled>true</enabled>
</snapshots> </repository>
</repositories> |
Èç¹ûÄãÊÇÓõÄÊÇGradle
dependencies
{
compile 'org.springframework: spring-context:5.1.0.BUILD-SNAPSHOT'
}repositories {
maven {
url 'https://repo.spring.io/libs-snapshot'
}
} |
Tips: ÆäʵÎÒ¾õµÃGradleÓ¦¸ÃÊÇÒ»ÖÖ±ÈMaven¸üÏȽøµÄ°æ±¾ÒÀÀµ¹ÜÀí¹¤¾ß£¬²»¹ýÈç½ñ¸÷´ó¹«Ë¾Ê¹ÓÃGradle
ËÆºõ»¹²»ÊǺܶ࣬ҲÐíÊÇÓëÒòΪEclipse ¶ÔGradle µÄÖ§³Ö»¹²»¹»ÏñIntellij Idea
ÄÇôÍêÃÀ°É¡£
Spring¿ò¼Ü°üº¬Ðí¶à²»Í¬µÄÄ£¿é¡£ ÕâÀïÎÒÃÇչʾÁËÌṩºËÐŦÄܵÄspring-context¡£
ÓÐ¹ØÆäËûÑ¡ÏÇë²ÎÔÄÓÒ²àµÄÈëÃÅÖ¸ÄÏ¡£
Ò»µ©ÄãʹÓÃspring-contextÒÀÀµ¹ØÏµÉèÖÃÄãµÄ¹¹½¨£¬Äã¾Í¿ÉÒÔ×öµ½ÒÔϼ¸µã£º
µ½ÕâÀïºó¹ÙÍøÓÐЩ²»Ïêϸ£¬²¹³äÏ¡£
·½·¨Ò»£º ʹÓÃSTS ¹¤¾ß¹¹½¨Õâ¸ö´øÓÐSpring-context ÉÏÏÂÎĵÄÏîÄ¿
×¼±¸¹¤×÷£º
JDK 1.8
STS IDE
Tips: ÏÂÔØµÄʱºòÓиö¿Ó×¢ÒâÏ£¬Èç¹ûÄãµÄJDKÊÇ64λ£¬Ä¬ÈÏÖ±½ÓÏÂÔØµÄSTSÊÇ32룬»á³öÏÖÕâ¸ö´íÎó¡£

ËùÒÔÏÂÔØµÄʱºòÒ»¶¨ÒªÏÂÔØJDKÆ¥ÅäµÄ°æ±¾²ÅÐУ¬ÒƲ½£ºhttps://spring.io/tools/sts/all

ÕâÀïÏÂÔØÍê³ÉºóÎÒÃÇÔÚÎÒÃǵÄIDE¿Õ°×´¦£¬ÓÒ¼ü¡ª¡ª> New¡ª¡ª> Other...

ÊäÈëmaven ËÑË÷£¬Ñ¡ÔñMaven Project£¬´´½¨Ò»¸öMavenÏîÄ¿

Ñ¡ÔñĬÈϵŤ×÷¿Õ¼ä

Ñ¡ÔñĬÈϵÄÀàÐÍ

ÊäÈëÏîÄ¿»ù±¾ÐÅÏ¢ºóµã»÷Finish Íê³É

È»ºóÎÒÃÇÓ¦¸Ã¿ÉÒÔ¿´µ½ÕâÑùµÄÏîÄ¿½á¹¹

Ê×ÏÈÐÞ¸Äpom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xingyun</groupId>
<artifactId>spring-context-sample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-context-sample</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId> spring-context</artifactId>
<version>5.1.0.BUILD-SNAPSHOT</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project> |
´´½¨Îļþ
package com.xingyun.spring_context_sample.hello;
public interface MessageService {
String getMessage();
} |
hello/MessagePrinter.java
package com.xingyun.spring_context_sample.hello;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MessagePrinter {
final private MessageService service;
@Autowired
public MessagePrinter(MessageService service)
{
this.service = service;
}
public void printMessage() {
System.out.println(this.service.getMessage());
}
} |
Tips: ×¢ÒâÏÂÕâÀïÓиö×¢½â²»ÒªÍüÁË
App.java
package com.xingyun.spring_context_sample;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Annotation
ConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.xingyun.spring_context_sample.hello.MessagePrinter;
import com.xingyun.spring_context_sample.hello.MessageService;
@Configuration
@ComponentScan
public class App
{
@Bean
MessageService mockMessageService() {
return new MessageService() {
public String getMessage() {
return "Hello World!";
}
};
}
public static void main( String[] args )
{
ApplicationContext context =
new AnnotationConfigApplicationContext(App.class);
MessagePrinter printer = context.getBean
(MessagePrinter.class);
printer.printMessage();
}
} |
Tips: ×¢ÒâÀàÉÏÓÐÁ½¸ö×¢½âºÍ·½·¨ÉÏÓÐÒ»¸ö×¢½â²»ÒªÍüÁË£¬ÀàµÄÃû×ÖÄã¿ÉÒԸijɹÙÍøÉϵÄApplication
Ò²¿ÉÒÔ±£ÁôĬÈϵÄAppÃû×ÖÒ²ÐС£
´´½¨³É¹¦ºóÏîÄ¿½á¹¹Ó¦¸ÃÊÇÕâÑù

µ±È»¿ÉÄÜÄã»á¿´×ÅÕâÖÖÏîÄ¿½á¹¹²»Êæ·þ£¬ÄÇôÄãÒ²¿ÉÒÔÑ¡Ôñ¸Ä±äÏ¡£

ÏîÄ¿½á¹¹¾Í±ä³ÉÁËÕâÖÖ£º

ÔËÐÐApp.main() Ö÷·½·¨

ÏîĿԴÂëÏÂÔØ£ºhttps://github.com/geekxingyun/JavaEE-Framework-Sample/tree/master/spring-context-sample
¸½Â¼£ººËÐÄJar°üÒÀÀµ¹ØÏµ
Tips: Èç¹ûÄã²»ÊÇдһ¸öjava web Application,ÄÇô½«²»ÐèÒªspring-web
Ä£¿é¡£


|