
éå»10幎éã®ç§ã®ãããã§ãã·ã§ãã«ãªJavaãããžã§ã¯ãã®ã»ãšãã©ã¯ã
SpringãŸãã¯
JEEã«åºã¥ããŠããŸããã ã©ã¡ãã®ãã©ãããã©ãŒã ãéåžžã«èªä¿¡ãæã£ãŠéçºãããŠããŸãããããã§ãããŸããŸãªåé¡ã«æ©ãŸãããŠããŸãã
SpringãšJEEã¯ã倧èŠæš¡ãªJavaãããžã§ã¯ãããè€éãªãšã³ã¿ãŒãã©ã€ãºãœãªã¥ãŒã·ã§ã³ã§äœæ¥ãã倧èŠæš¡ãªéçºããŒã ã®ãŽãŒã«ãã¹ã¿ã³ããŒãã§ãã ããããJavaã³ãã¥ããã£ã®æçã®å¿
ç¶çãªçµæã¯ã以åã®ç±æãšé©æ°ã®éšåçãªåªå€±ã§ãããäž¡æ¹ã®ä¿¡é Œæ§ã«å€§ããææãäžããŸããã
JEEã¯ããæ°å¹Žã§åçã«å€åããŸããããEJB 2.xã®ããŒãžã§ã³ä»¥éå»æ¢ããããã©ãããã©ãŒã ã®äœæè
ã«ãã£ãŠæå®ãããã¢ãããŒããšãœãªã¥ãŒã·ã§ã³ã«ã€ããŠãéçºè
ããéé£ãããŠããŸãã å€ãã®äººãJEEããJ2EEããšåŒãã§ããŸãããååã®å€æŽã¯8幎åã«è¡ãããŸããïŒ
Springãèããæ¹åãããŠããŸããããã¹ãŠã®ãŠãŒã¶ãŒããããèªèããŠããããã§ã¯ãããŸããã ã³ãŒãæ§æããééçã§éç Žå£çãªSpring 3.x以éã®ææ°ã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠäœæããå¯èœæ§ã¯ãããŸãããã»ãšãã©ã®ãããžã§ã¯ãã¯XMLãã¡ã€ã«ãšæ代é
ãã®ã¢ãŒããã¯ãã£ãœãªã¥ãŒã·ã§ã³ã«é床ã«é
äºããç¶ããŠããŸãã åé¡ã¯ãå€ãã®éçºè
ãäœããã®çç±ã§ä»¥åã®ããŒãžã§ã³ã§å®è¡ãããã¢ãããŒããå€æŽããªãããšã§ãã
ãããã®çç±ã«ãããä»ã®èšèªãšãã¬ãŒã ã¯ãŒã¯ãžã®éãéãããŸããã Javaã¯ãããã12幎以äžåã«å人ãããžã§ã¯ãã§æã人æ°ã®ããèšèªã§ããããä»æ¥ã®è¥ãéçºè
ã¯PythonãScalaãªã©ã«ãã£ãšæ³šæãåãå§ããŠããããã§ãã éå»10幎éã§æã圱é¿åã®ããWebãã¬ãŒã ã¯ãŒã¯ã§ãã
RailsãšRuby
SinatraããŒã¹ã®Webãã¬ãŒã ã¯ãŒã¯ã¯ãéå»5幎éã§å€ãã®ãã€ã¯ããã¬ãŒã ã¯ãŒã¯ãçã¿åºããŸããã
Javaã®äžçã§ã®
Groovyãš
Grails㯠ãRubyãšRailsããã®æåã®çå£ãªçãã§ããã çŸåšã§ã¯ãæãä¿å®çãªãšã³ã¿ãŒãã©ã€ãºéçºããŒã ã®ããŒã«ããã¯ã¹ã«ããããŸãã ãã ããæ°ããJVMããŒã¹ã®ãã¬ãŒã ã¯ãŒã¯ã¯ããã«é²æ©ããŠããŸãã JEEãšSpring APIã䜿ãããã
Playã·ã§ã«ã€ã³ã¿ãŒãã§ãŒã¹ã«ã©ãããã代ããã«ããã¬ãŒã ã¯ãŒã¯ã¯ãäžèŠåºæ¬çãªJavaãµãŒãã¬ããã¢ãã«ã§ãããããã°ãŒãããç Žæ£ãå§ããŸããã
Springã¯ããã¯ãææ°ã®é©æ°çãªããŒã«ãšã¯èŠãªãããŸããã éçºè
ã¯ãç¹ã«å€ãã¢ããªã±ãŒã·ã§ã³ã§ããã䜿çšããŸãããäž»ã«å¿
èŠãªããã§ããã圌ãèªèº«ããããæãã§ããããã§ã¯ãããŸããã PlayããŸã£ããç°ãªããã©ãããã©ãŒã ãããããšããã«ååšããäžæ¹ã§ãå人ãããžã§ã¯ãã§Springã䜿çšããéçºè
ãšæåŸã«è©±ããããšãæãåºããŸããã
ããã¯æ®å¿µã§ããSpringã¯ãæ£ããæ§æã§ããã°éåžžã«åŒ·åãªããŒã«ã ããã§ãã
Spring Data JPAã¯ãDAOã¯ã©ã¹ãäœæããã«ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®ã·ã³ãã«ãªç®¡çãæäŸããŸãããŸããSpring Data JPAã䜿çšãããšãNoSQLããŒã¿ã¹ãã¢ãæ£ããæ§æã§ããã°ãåãæ©èœãååŸã§ããŸãã ããã«ãSpringã®å©ããåããŠã
ãšã³ã¿ãŒãã©ã€ãºçµ±åãå®è¡ããããWebãŸãã¯
Androidã¢ããªã±ãŒã·ã§ã³ã§
æã人æ°ã®ãããœãŒã·ã£ã«ãµãŒãã¹ã®APIã«ã¢ã¯ã»ã¹ãããã
Spring Securityãä»ããŠã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã管çãããã§ããŸããèšå®ããã
SpringããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ã¯ãéåžžã«èŠçãªããã»ã¹ã§ãã ããã¯ããã¯ãããžãŒãéžæããéã®æ¢åã®éžæè¢ãå€æ°ããããã§ãã ããšãã°ããã§ã«æéããããŠJdbcTemplateãšHibernate / JPAãåŠç¿ããŠããå ŽåãSpring Data JPAãåŠç¿ããŠäœ¿çšãã䟡å€ã¯ãããŸããïŒ
Spring Data RESTãš
Spring HATEOASã®éãã¯äœã§ããïŒ
ãã1ã€ã®è€éãªèŠå ã¯ãSpringãéæšå¥šã®ãã®ãã»ãšãã©èªèãããæè¡ã®éžæã«é¢ããæ
å ±ã«åºã¥ãã決å®ãäžããããŸããŸãªç«¶åãæé€ããä»ã®é »ç¹ã«çºçããåé¡ã解決ããã®ã«ååãªæ
å ±ãæäŸããªãããšã§ãã åé¡ã®ä¿®æ£äŸãã€ã³ã¿ãŒãããã§æ€çŽ¢ãããšãæ€çŽ¢çµæã®äžéšã«å€ãã¢ãããŒãã解決çãžã®ãªã³ã¯ã衚瀺ãããŸãã ã»ãšãã©ã®å Žåãããã¯ã泚éããŒã¹ã®æ§æã®å®è£
ãšä¿å®ã容æã§ããã«ãããããããXMLæ§æãåºãæ®åããŠããããã§ãã
Thymeleafã
Velocityã®ãããªã¯ãªãŒã³ãªãã³ãã¬ãŒãã·ã¹ãã ã䜿çšãã代ããã«ãã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã¯åŒãç¶ãJSTLã§JSPã䜿çšããŸãã
ãããã®åé¡ã解æ¶ããããšãžã®æžæã¯ãSpringã®äœæè
ã®éã§æ¶ããããšã¯ãããŸããã
Railsã³ãã³ãã©ã€ã³ããŒã«ã«è§ŠçºãããŠã
Spring Rooã玹ä»ããŸãããããã¯ãã³ãã³ãã©ã€ã³ãä»ããŠWebã³ã³ãããŒã©ãŒãJPAãšã³ãã£ãã£ãªã©ã®èŠçŽ ãäœæã§ããè¿
éãªéçºã·ã¹ãã ã§ãã ãã ããéèªæãªäœ¿çšã§ã¯ãSpring Rooããã¹ã¿ãŒããããšã¯ãã¢ããªã±ãŒã·ã§ã³ãæåã§ãã«ãããã®ãšã»ãšãã©åããããå°é£ã§ãã å€ãã®éçºè
ã¯ãRooããããžã§ã¯ãã«æ®éçã«è¿œå ãããããžãã¯ããæäŸããè±å¯ãªæ³šéãšAspectJãã¡ã€ã«ã«è¿œãããŸããã Rooã¯ãããžã§ã¯ãããç°¡åãã€çã¿ã䌎ããã«åé€ã§ãããšè¿°ã¹ãŠããŸãããå¿
èŠã«å¿ããŠãçŸå®ã¯çè«ãããå³ããã§ãã ãããŠãããšãæåãããšããŠããAspectJãJavaã«å€æãããšãéæ³ã®ã³ãã³ãã©ã€ã³ããŒã«ã䜿çšã§ããªããªããŸãã
Spring Bootã¯ã次äžä»£ã®Springã¢ããªã±ãŒã·ã§ã³æ§æç°¡çŽ åããŒã«ã§ãã ããã¯èªåã³ãŒãçæã®æ段ã§ã¯ãããŸãããããããžã§ã¯ãã¢ã»ã³ããªã®èªååã·ã¹ãã ã®ãã©ã°ã€ã³ã§ãïŒMavenããã³GradleããµããŒãïŒã
ãã©ã°ã€ã³ã¯ãSpringã¢ããªã±ãŒã·ã§ã³ããã¹ãããã³ãããã€ããããã®æ©èœãæäŸããŸãã mvn spring-bootïŒrunã³ãã³ãã¯ãããŒã8080ã§ã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸããããã¯ãããªã人æ°ã®ããMaven
Jettyãã©ã°ã€ã³ã«
䌌ãŠããŸãã ããã«ãSpring Bootã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ãå®å
šãªTomcatã³ã³ãããåã蟌ãŸããå¥åã®jarãã¡ã€ã«ã«ããã¯ã§ããŸãã ãã®ã¢ãããŒãã¯ãPlayã¢ããªã±ãŒã·ã§ã³ã®ãããã€ã¡ã³ãã¢ãã«ããåçšããŠããŸãïŒåæã«ãåŸæ¥ã®warãã¡ã€ã«ãäœæããããšãã§ããŸãïŒã
Spring Bootã®äž»ãªå©ç¹ã¯ãã¯ã©ã¹ãã¹ã®å
容ã«åºã¥ãããªãœãŒã¹æ§æã§ãã ããšãã°ãMavenãããžã§ã¯ãã®pom.xmlãã¡ã€ã«ã«JPAäŸåé¢ä¿ãšPostgreSQLãã©ã€ããŒãå«ãŸããŠããå ŽåãSpring Bootã¯PostgreSQLã®æ°žç¶åã¢ãžã¥ãŒã«ãæ§æããŸãã WebäŸåé¢ä¿ãè¿œå ãããšãããã©ã«ãã§Spring MVCãæ§æãããŸãã æ°žç¶æ§ãå¿
èŠãªå ŽåãSpring Bootã¯HibernateãHSQLDBããŒã¿ããŒã¹ãæã€JPAãããã€ããŒãšããŠèšå®ããŸãã Webã¢ããªã±ãŒã·ã§ã³ãäœæããŠããããããã«äœãæå®ããªãå ŽåãSpring Bootã¯Thymeleafãã³ãã¬ãŒãã·ã¹ãã ã®ãã¥ãŒãªãŸã«ããŒãæ§æããŸãã
ããã©ã«ãã®èšå®ãšããã°ãSpring Bootã¯ãã®ç¹ã«é¢ããŠéåžžã«çŽæçã§ãã ããªãã¯åœŒã®èšå®ã®éžæã«ãã€ãåæãããšã¯éããŸããããå°ãªããšã圌ã¯ããªãã«äœæ¥ã¢ãžã¥ãŒã«ãæäŸããŸãã ããã¯ãç¹ã«ããã©ã«ãèšå®ã§äœæ¥ãéå§ããæ¢åã®ä»£æ¿æ¡ãæ€èšããªããæ§æãå€æŽã§ããåå¿è
ã®éçºè
ã«ãšã£ãŠéåžžã«äŸ¿å©ãªã¢ãããŒãã§ãã åæãããããã¯é£ãã質åãããããåŸããããã¯ããã«åªããŠããã ããã«
ããããžã§ã¯ãã®å
¬åŒããŒãžã«ã¯ ããHello worldãã¬ãã«ã§ãã¹ãŠã®äž»èŠãªã¿ã€ãã®ãããžã§ã¯ãããã°ããç解ããå®éã«å®è£
ã§ããå®å
šãªãã¥ãŒããªã¢ã«ãå€æ°ãããŸãã

å®éãã¢ããªã±ãŒã·ã§ã³ã€ã³ãã©ã¹ãã©ã¯ãã£ãæ§ç¯ããã«ã¯ãpom.xmlã«å¿
èŠãªã¢ãžã¥ãŒã«ãè¿œå ããŸãã
... <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.0.0.RC3</version> </parent> ... <properties> <start-class>com.mypackage.Application</start-class> <java.version>1.7</java.version> </properties> ... <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.3.174</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> ... <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> ...
ã¡ã€ã³Javaã¯ã©ã¹ã次ã®ããã«èšè¿°ããŸãã
@Configuration @EnableAutoConfiguration @ComponentScan @PropertySource("classpath:application.properties") public class Application { @Bean MyCustomService myCustomService() { return new MyCustomService(""); } public static void main(String[] args) { ApplicationContext ctx = SpringApplication.run(Application.class, args); System.out.println("Let's inspect the beans provided by Spring Boot:"); String[] beanNames = ctx.getBeanDefinitionNames(); Arrays.sort(beanNames); for (String beanName : beanNames) { System.out.println(beanName); } } }
ã»ãšãã©ã®å Žåãããã©ã«ãèšå®ãå€æŽããã«ã¯ãPOMãã¡ã€ã«ãå€æŽããã ãã§ãã ãã®ãããäžèšã®äŸã§ã¯ãH2ããŒã¿ããŒã¹ã®äŸåé¢ä¿ã®è¿œå ã瀺ãããŠããŸãã ãã®å€æŽã確èªããSpring Bootã¯ãããã©ã«ãã®HSQLDBã§ã¯ãªãH2ããŒã¿ããŒã¹ã®JPAæ°žç¶æ§ã¢ãžã¥ãŒã«ãæ§æããŸãã ããã©ã«ãã®Tomcatã®ä»£ããã«Jettyãçµã¿èŸŒã¿ã³ã³ãããŒãšããŠäœ¿çšããå Žåã¯ãé©åãªäŸåé¢ä¿ãè¿œå ããã ãã§ãã
çŸæç¹ã§ã¯ãSpring Bootã¯ãŸã åæ段éã«ããããã¡ãããå®å®ããã¬ãã«ã«ç§»è¡ããåã«ãå€ãã®å€å®¹ãçµéšããå¿
èŠããããŸãã æ¬æ Œçãªã·ã¹ãã ã®æ§ç¯ã«äœ¿çšããã«ã¯ææå°æ©ãããããŸããããããŸããŸãªçš®é¡ã®å人ããã¬ãŒãã³ã°ãããã³ãã¹ããããžã§ã¯ãã«éåžžã«é©ããŠããŸãããã®å®è£
ã¯ãæçšãªæ©èœã®äœæãšã¯ãŸã£ããé¢ä¿ã®ãªããæãŸãããªãéã®éçç£çã§æ¥åžžçãªäœæ¥ãåãé€ãããšãéåžžã«éèŠã§ãã
Spring Bootã®æ·±å»ãªããŒã«ãšããŠå°æ¥çã«Spring BootãéçºãããšããæœåšçãªèŠéãã®ã³ã³ããã¹ãã§ã¯ã蚱容ã§ããæè¡ææžïŒè±èªã®ã¿ã§
ãããSpring Frameworkã®800ããŒãžã®çŸç§äºå
žãšæ¯èŒããŠãŸã ãã匱ãïŒã®ååšãç¹ã«åæ°ã¥ããããŸãã