Slide 1

Slide 1 text

par Gildas Cuisinier @gcuisinier Spring est mort Vive Spring NoXML jeudi 15 novembre 2012

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Injection de dépendances AOP Abstraction de services Spring ? jeudi 15 novembre 2012

Slide 4

Slide 4 text

Retour en 2004 jeudi 15 novembre 2012

Slide 5

Slide 5 text

Spring 1.0 1 2 3 4 5 6 7 8 9 10 jeudi 15 novembre 2012

Slide 6

Slide 6 text

Spring 1.2 1 2 3 4 5 6 7 jeudi 15 novembre 2012

Slide 7

Slide 7 text

Spring 1.2 jeudi 15 novembre 2012

Slide 8

Slide 8 text

1 3 4 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 20 21 22 24 25 26 28 29 30 jeudi 15 novembre 2012

Slide 9

Slide 9 text

Spring 2.0 1 2 4 6 8 10 11 16 jeudi 15 novembre 2012

Slide 10

Slide 10 text

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 jeudi 15 novembre 2012

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Spring 3.0 1 @Configuration // 2 public class ApplicationConfig { 3 4 @Bean //

Slide 13

Slide 13 text

Spring 3.0 1 @Component 2 public class MyTask { 3 4 @Scheduled(cron="* * * * *") 5 public void execute() { 6 // code 7 } 8 9 } 1 2 jeudi 15 novembre 2012

Slide 14

Slide 14 text

Spring 3.1 @nnotations ++ jeudi 15 novembre 2012

Slide 15

Slide 15 text

1 1 @Configuration 2 @ComponentScan("be.hikage") 3 public class ApplicationConfig @ComponentScan jeudi 15 novembre 2012

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

1 @Configuration 2 @EnableScheduling 3 public class ApplicationConfig { 4 } 1 @EnableScheduling jeudi 15 novembre 2012

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

1 2 3 4 @EnableCaching jeudi 15 novembre 2012

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Abstraction de Cache Out of the Box ConcurrentHashMap EhCache GemFire JCache (Spring 3.2/3.3) jeudi 15 novembre 2012

Slide 25

Slide 25 text

@EnableWebMvc 1 1 @Configuration 2 @EnableWebMvc 3 public class WebConfig { 4 } jeudi 15 novembre 2012

Slide 26

Slide 26 text

@EnableWebMvc 1 2 3 4 jeudi 15 novembre 2012

Slide 27

Slide 27 text

@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

Slide 28

Slide 28 text

@EnableWebMvc Ajout Intercepteur Configuration de ViewController Ajout de ResourceHandler Ne permet pas une configuration fine ➡@EnableWebMvc et étendre WebMvcConfigurationSupport jeudi 15 novembre 2012

Slide 29

Slide 29 text

@Enable* EnableAsync EnableAspectJAutoProxy EnableSpringConfigured EnableLoadTimeWeaving EnableTransactionManagement jeudi 15 novembre 2012

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

DEMO jeudi 15 novembre 2012

Slide 34

Slide 34 text

Spring 3.1 bis jeudi 15 novembre 2012

Slide 35

Slide 35 text

@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

Slide 36

Slide 36 text

1 2 3 4 5 6 jeudi 15 novembre 2012

Slide 37

Slide 37 text

Activation 1 2 3 spring.profiles.active 4 dev 5 6 jeudi 15 novembre 2012

Slide 38

Slide 38 text

Activation 1 2 dispatcher 3 osf.web.servlet.DispatcherServlet 4 5 spring.profiles.active 6 dev 7 8 jeudi 15 novembre 2012

Slide 39

Slide 39 text

Spring 3.1, c’est aussi Support Hibernate 4 Namespace c: JPA sans Persistence.xml ... jeudi 15 novembre 2012

Slide 40

Slide 40 text

Spring 3.2 jeudi 15 novembre 2012

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

Spring est mort ? jeudi 15 novembre 2012

Slide 43

Slide 43 text

Spring en 2003 Framework jeudi 15 novembre 2012

Slide 44

Slide 44 text

Spring en 2012 Framework Security Batch Integration Flex SpringData SpringMobile SpringAndroid SpringSocial jeudi 15 novembre 2012

Slide 45

Slide 45 text

Conclusions jeudi 15 novembre 2012

Slide 46

Slide 46 text

Questions ? jeudi 15 novembre 2012