Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Spring<XML> est mort, vive Spring NoXML
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Gildas Cuisinier
November 13, 2012
Programming
150
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Spring<XML> est mort, vive Spring NoXML
Gildas Cuisinier
November 13, 2012
More Decks by Gildas Cuisinier
See All by Gildas Cuisinier
10 command line tools to improve your day !
gcuisinier
0
100
WaJUG - Introduction à Docker
gcuisinier
0
360
Other Decks in Programming
See All in Programming
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.5k
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.7k
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.4k
どこまでゆるくて許されるのか
tk3fftk
0
260
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
170
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.6k
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
300
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
750
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
600
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
1
470
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
410
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
130
Featured
See All Featured
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
150
Writing Fast Ruby
sferik
630
63k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
30 Presentation Tips
portentint
PRO
1
330
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Site-Speed That Sticks
csswizardry
13
1.2k
BBQ
matthewcrist
89
10k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
66
55k
Scaling GitHub
holman
464
140k
Transcript
par Gildas Cuisinier @gcuisinier Spring<XML> est mort Vive Spring NoXML
jeudi 15 novembre 2012
Maître Artisan Développeur, Sfeir Benelux Initiateur de la section Spring
de @Developpez.com Relecteur de plusieurs livres sur Spring Evangéliste Spring ( JUGs, Devoxx France ) whois(@gcuisinier) jeudi 15 novembre 2012
Injection de dépendances AOP Abstraction de services Spring ? jeudi
15 novembre 2012
Retour en 2004 jeudi 15 novembre 2012
Spring 1.0 1 <bean id="monBean" class="be.hikage.service.MyService"> 2 <property name="version" value="maVersion"/>
3 </bean> 4 5 <bean /> 6 <bean /> 7 <bean /> 8 <bean /> 9 <bean /> 10 <bean /> jeudi 15 novembre 2012
Spring 1.2 1 <bean id="monBean" class="be.hikage.service.MyService"> 2 <property name="version" value="maVersion"/>
3 </bean> 4 5 <import resource="service-layer.xml"/> 6 <import resource="dao-layer.xml"/> 7 <import resource="disp-layer.xml"/> jeudi 15 novembre 2012
Spring 1.2 jeudi 15 novembre 2012
1 <bean id="filterChainProxy" 2 class="org.acegisecurity.util.FilterChainProxy"> 3 <property name="filterInvocationDefinitionSource"> 4 <value>
5 CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON 6 PATTERN_TYPE_APACHE_ANT 7 /login= 8 httpSessionContextIntegrationFilter 9 /login.form= 10 httpSessionContextIntegrationFilter 11 /assets/**= 12 httpSessionContextIntegrationFilter 13 /j_acegi_security_check= 14 httpSessionContextIntegrationFilter, 15 formAuthenticationProcessingFilter 16 /**= 17 httpSessionContextIntegrationFilter, 18 exceptionTranslationFilter 19 </value> 20 </property> 21 </bean> 22 <bean id="httpSessionContextIntegrationFilter" 23 class="org.acegisecurity...HttpSessionContextIntegrationFilter"> 24 </bean> 25 26 <bean id="formLoginAuthenticationEntryPoint" 27 class="org.acegisecurity...AuthenticationProcessingFilterEntryPoint"> 28 <property name="loginFormUrl" value="/login"/> 29 <property name="forceHttps" value="false"/> 30 </bean> jeudi 15 novembre 2012
Spring 2.0 1 <security:http auto-config="true"> 2 <security:intercept-url pattern="/login*" 3 access="IS_AUTHENTICATED_ANONYMOUSLY"/>
4 <security:intercept-url pattern="/logoutSuccess*" 5 access="IS_AUTHENTICATED_ANONYMOUSLY"/> 6 <security:intercept-url pattern="/css/main.css" 7 access="IS_AUTHENTICATED_ANONYMOUSLY"/> 8 <security:intercept-url pattern="/**" 9 access="ROLE_USER"/> 10 11 <security:form-login login-page="/login.html" 12 login-processing-url="/loginProcess" 13 default-target-url="/index.jsp" 14 <security:logout logout-url="/logout" 15 logout-success-url="/logoutSuccess.html"/> 16 </security:http> jeudi 15 novembre 2012
1 @Controller 2 public class MyController { 3 4 private
MyService myService; 5 6 @Autowired 7 public void setMyService(MyService myService) { 8 this.myService = myService; 9 } 10 11 } Spring 2.5 1 <context:component-scan base-package="be.hikage" /> jeudi 15 novembre 2012
Spring 3.0 1 @Configuration 2 public class ApplicationConfig { 3
4 @Bean 5 public MyService myService() { 6 return new MyService(); 7 } 8 9 } jeudi 15 novembre 2012
Spring 3.0 1 @Configuration // <beans> 2 public class ApplicationConfig
{ 3 4 @Bean //<bean id="myService> 5 public MyService myService() { 6 return new MyService(); 7 } 8 9 } 1 ApplicationContext factory = 2 new AnnotationConfigApplicationContext(ApplicationConfig.class) jeudi 15 novembre 2012
Spring 3.0 1 @Component 2 public class MyTask { 3
4 @Scheduled(cron="* * * * *") 5 public void execute() { 6 // code 7 } 8 9 } 1 <context:component-scan base-package="be.hikage" /> 2 <task:annotation-driven scheduler="myScheduler" .. /> jeudi 15 novembre 2012
Spring 3.1 @nnotations ++ jeudi 15 novembre 2012
1 <context:component-scan base-package="be.hikage"/> 1 @Configuration 2 @ComponentScan("be.hikage") 3 public class
ApplicationConfig @ComponentScan jeudi 15 novembre 2012
1 public class MaTache { 2 3 @Scheduled(fixedRate = 1000)
4 public void execute() { 5 System.out.println("Maman, je parle au ParisJUG"); 6 } 7 } @EnableScheduling jeudi 15 novembre 2012
1 @Configuration 2 @EnableScheduling 3 public class ApplicationConfig { 4
} 1 <task:annotation-driven /> @EnableScheduling jeudi 15 novembre 2012
1 @Target(ElementType.TYPE) 2 @Retention(RetentionPolicy.RUNTIME) 3 @Import(SchedulingConfiguration.class) 4 @Documented 5 public
@interface EnableScheduling { 6 7 } @EnableScheduling jeudi 15 novembre 2012
1 @Configuration 2 public class SchedulingConfiguration { 3 4 @Bean(name=AnnotationConfigUtils.SCHEDULED_ANNOTATION_PROCESSOR_BEAN_NAME)
5 @Role(BeanDefinition.ROLE_INFRASTRUCTURE) 6 public ScheduledAnnotationBeanPostProcessor scheduledAnnotationProcessor() { 7 return new ScheduledAnnotationBeanPostProcessor(); 8 } 9 10 } @EnableScheduling jeudi 15 novembre 2012
1 @Service 2 public class CalculateurPrix { 3 4 @Cacheable(value
= "price") 5 public Double calculePrix(String reference){ 6 // calcul long et complexe 7 return 42L; 8 } 9 10 11 12 13 14 } @EnableCaching jeudi 15 novembre 2012
1 @Service 2 public class CalculateurPrix { 3 4 @Cacheable(value
= "price") 5 public Double calculePrix(String reference){ 6 // calcul long et complexe 7 return 42L; 8 } 9 10 @CacheEvict(value = "price",allEntries = true) 11 public void setRistourne(Float indice){ 12 13 } 14 } @EnableCaching jeudi 15 novembre 2012
1 <caching:annotation-driven /> 2 3 <bean class="org.springframework.cache .concurrent.ConcurrentMapCacheManager"/> 4 @EnableCaching
jeudi 15 novembre 2012
1 @Configuration 2 @EnableCaching 3 public class ApplicationConfig { 4
5 @Bean 6 CacheManager cacheManager(){ 7 return 8 new ConcurrentMapCacheManager(); 9 } 10 } @EnableCaching jeudi 15 novembre 2012
Abstraction de Cache Out of the Box ConcurrentHashMap EhCache GemFire
JCache (Spring 3.2/3.3) jeudi 15 novembre 2012
@EnableWebMvc 1 <mvc:annotation-driven /> 1 @Configuration 2 @EnableWebMvc 3 public
class WebConfig { 4 } jeudi 15 novembre 2012
@EnableWebMvc 1 <mvc:annotation-driven/> 2 <mvc:interceptors> 3 <bean class="osf..LocaleChangeInterceptor"/> 4 </mvc:interceptors>
jeudi 15 novembre 2012
@EnableWebMvc + WebMvcConfigurerAdapter 1 @Configuration 2 @EnableWebMvc 3 public class
WebConfig 4 extends WebMvcConfigurerAdapter{ 5 6 @Override 7 public void addInterceptors(InterceptorRegistry registry) { 8 registry.addInterceptor(new LocaleChangeInterceptor()); 9 } 10 } jeudi 15 novembre 2012
@EnableWebMvc Ajout Intercepteur Configuration de ViewController Ajout de ResourceHandler Ne
permet pas une configuration fine ➡@EnableWebMvc et étendre WebMvcConfigurationSupport jeudi 15 novembre 2012
@Enable* EnableAsync EnableAspectJAutoProxy EnableSpringConfigured EnableLoadTimeWeaving EnableTransactionManagement jeudi 15 novembre 2012
Testing 2.5 1 @RunWith(SpringJUnit4ClassRunner.class) 2 @ContextConfiguration("test-config.xml") 3 public class MyTest
{ 4 @Autowired 5 MyService service; 6 7 @Test 8 public void myTest(){ 9 } 10 } jeudi 15 novembre 2012
Testing 3.1 1 @RunWith(SpringJUnit4ClassRunner.class) 2 @ContextConfiguration(classes = TestConfig.class) 3 @ActiveProfiles("test")
4 public class MyTest { 5 @Autowired 6 MyService service; 7 8 @Test 9 public void myTest(){ 10 } 11 } jeudi 15 novembre 2012
1 public class WebInitializer implements WebApplicationInitializer { 2 3 @Override
4 public void onStartup(ServletContext servletContext) throws ServletException { 5 6 AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 7 context.register(WebMvcConfig.class); 8 9 ServletRegistration.Dynamic servletConfig = servletContext.addServlet("dispatcher", new DispatcherServlet(context)); 10 servletConfig.setLoadOnStartup(1); 11 servletConfig.addMapping("*.do"); 12 Servlet 3.0 jeudi 15 novembre 2012
DEMO jeudi 15 novembre 2012
Spring 3.1 bis jeudi 15 novembre 2012
@Profile 1 @Configuration 2 public class ApplicationConfig { 3 4
@Bean 5 DataSource dataSource(){ 6 JndiObjectFactoryBean result = new JndiObjectFactoryBean(); 7 result.setJndiName("jdbc/dataSource"); 8 return (DataSource) result.getObject(); 9 } 10 } jeudi 15 novembre 2012
<Profile /> 1 <beans profile="dev"> 2 <jdbc:embedded-database id="dataSource"> 3 <jdbc:script
location="schema.sql"/> 4 <jdbc:script location="test-data.sql"/> 5 </jdbc:embedded-database> 6 </beans> jeudi 15 novembre 2012
Activation 1 <webapp> 2 <context-param> 3 <param-name>spring.profiles.active</param-name> 4 <param-value>dev</param-value> 5
</context-param> 6 </webapp> jeudi 15 novembre 2012
Activation 1 <servlet> 2 <servlet-name>dispatcher</servlet-name> 3 <servlet-class>osf.web.servlet.DispatcherServlet</servlet-class> 4 <init-param> 5
<param-name>spring.profiles.active</param-name> 6 <param-value>dev</param-value> 7 </init-param> 8 </servlet> jeudi 15 novembre 2012
Spring 3.1, c’est aussi Support Hibernate 4 Namespace c: JPA
sans Persistence.xml ... jeudi 15 novembre 2012
Spring 3.2 jeudi 15 novembre 2012
Spring 3.2 RC1 - Release début Novembre Principalement des améliorations
de l’existant Support des contrôleurs asynchrones dans WebMVC Amélioration du testing (REST, MVC) Release prévue pour le 12/12/12 ;-) Spring 3.3 JEE 7 : JPA 2.1, Bean Validation 1.1, JMS 2 Spring 3.2 jeudi 15 novembre 2012
Spring est mort ? jeudi 15 novembre 2012
Spring en 2003 Framework jeudi 15 novembre 2012
Spring en 2012 Framework Security Batch Integration Flex SpringData SpringMobile
SpringAndroid SpringSocial jeudi 15 novembre 2012
Conclusions jeudi 15 novembre 2012
Questions ? jeudi 15 novembre 2012