SlideShare a Scribd company logo
Spring<XML> est mort
 Vive Spring NoXML
      par Gildas Cuisinier
          @gcuisinier
whois(@gcuisinier)
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 )
Spring ?
Spring ?




              es
            nc
          da
        en




                              AO
         ép




                                P
       ed
     nd
  tio
 ec
Inj




          Abstraction de services
Retour en 2004
Retour en 2004
Spring 1.0
Spring 1.0
1 <bean id="monBean" class="be.hikage.service.MyService">
2     <property name="version" value="maVersion"/>
3 </bean>
4
5 <bean />
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   />
Spring 1.2
Spring 1.2
1 <bean id="monBean" class="be.hikage.service.MyService">
2     <property name="version" value="maVersion"/>
3 </bean>
4
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"/>
Spring 1.2
">
                                                                                Proxy
                                      xy"                          lter  Chain
                              inPro                        il.Fi               Sourc
                                                                                      e ">
                filt  erCha                 curi   ty.ut                ition
       an id
             ="
                             g.ace
                                     gise                       Defin
1 <be                s="or                              ation
               clas                       lter  Invoc
                                 e="fi                                            PARIS
                                                                                         ON
2                   ert  y nam                                             E_COM
             <prop                                           ASE_B
                                                                     EFOR
 3                      lue>                         OWERC
                   <v a                      _TO_L
                                    T_URL                     NT
 4                        C ONVER                     CHE_A
                                            P E_APA
                                   RN_TY
  5                       PATTE                                                  er
                                                                          nFilt
                                    n =                     nteg   ratio
   6                       /logi                    textI
                                     essi   onCon
   7                        httpS                                              lter
                                            rm=                         ionFi
                                    in.fo                        egrat
    8                        /log                        xtInt
                                                 Conte
                                       e ssion
     9                        httpS                                               ter
                                                =                          onFil
                                        ts/**                 Inte  grati
    10                         /asse                  ntext
                                         ess ionCo                eck=
     11                         httpS                     ty_ch                      er,
                                                  ecuri                       nFilt
                                         eg i_s                  nteg  ratio
     12                          /j_ac                   textI                      er
                                                 onCon                       gFilt
                                          essi                  Proc  essin
      13                          httpS                 ation
                                           uth  entic
       14                         formA                                                er,
                                                                                nFilt
                                                                   nteg  ratio
        15                         /**=                    textI
                                            essi   onCon                lter
        16                          httpS                       ionFi
                                                      ra nslat
                                             tionT
         17                          excep
                                        ue>
         18                    < /v a l
                                                                                                                      r">
          19                  roper
                                      ty>                                            lter"                      Filte
                         </p                                                  ionFi                  tegr ation
                                                                      egrat                    extIn
           20
                           n>                           onte   xtInt               ssio  nCont
                    </bea                       sionC                       ttpSe
             1                          tpSes                       y...H
           2                  id="h
                                      t                      curit
                    <bean                            egise
            22                         ="o  rg.ac
                               class                                                                                      Point
                                                                                                                                ">
            23                                                                           t"                    lter Entry
                      </bea
                              n>                                                  yPoin                  ingFi
             24                                                      atio  nEntr              onPr ocess
                                                             entic                     icati
                                               Logi  nAuth                ..Au  thent            "/>
              25                      "form                        rity.                   login
                              n id=                        isecu                   ue="/
                       <bea                        .aceg              mUrl"
                                                                               val
               26                          ="org               inFor                        e"/>
                                  class                     og                       "fals
                                                    me="l                     alue=
               27                       erty
                                                na                     ps" v
                               <prop                           ceHtt
                                                 name  ="for
                28                       erty
                                <prop
                 29
                                   n>
                          </bea
                 30
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>
Spring 2.5
 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 @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 }


1 <context:component-scan base-package="be.hikage" />
Spring 3.0
1 @Configuration
2 public class ApplicationConfig {
3
4     @Bean
5     public MyService myService() {
6         return new MyService();
7     }
8
9 }
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 }
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)
Spring 3.0
1 @Component
2 public class MyTask {
3
4     @Scheduled(cron="* * * * *")
5     public void execute() {
6         // code
7     }
8
9 }
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" .. />
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" .. />
Spring 3.1
@nnotations ++
@ComponentScan


1 <context:component-scan
      base-package="be.hikage"/>



1 @Configuration
2 @ComponentScan("be.hikage")
3 public class ApplicationConfig
@ComponentScan


1 <context:component-scan
      base-package="be.hikage"/>



1 @Configuration
2 @ComponentScan("be.hikage")
3 public class ApplicationConfig
@EnableScheduling

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

1 <task:annotation-driven />
@EnableScheduling

1 <task:annotation-driven />



1   @Configuration
2   @EnableScheduling
3   public class ApplicationConfig {
4   }
@EnableScheduling

1   @Target(ElementType.TYPE)
2   @Retention(RetentionPolicy.RUNTIME)
3   @Import(SchedulingConfiguration.class)
4   @Documented
5   public @interface EnableScheduling {
6
7   }
@EnableScheduling
 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 }
@EnableCaching
 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
 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
1 <caching:annotation-driven />
2
3     <bean class="org.springframework.cache
    .concurrent.ConcurrentMapCacheManager"/>
4
@EnableCaching
 1   @Configuration
 2   @EnableCaching
 3   public class ApplicationConfig {
 4
 5       @Bean
 6       CacheManager cacheManager(){
 7           return
 8              new ConcurrentMapCacheManager();
 9       }
10   }
Abstraction de Cache

Out of the Box

 ConcurrentHashMap

 EhCache

GemFire

JCache (Spring 3.2/3.3)
@EnableWebMvc
1 <mvc:annotation-driven />
@EnableWebMvc
1 <mvc:annotation-driven />




1   @Configuration
2   @EnableWebMvc
3   public class WebConfig {
4   }
@EnableWebMvc
1 <mvc:annotation-driven/>
2 <mvc:interceptors>
3     <bean class="osf..LocaleChangeInterceptor"/>
4 </mvc:interceptors>
@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   }
@EnableWebMvc
@EnableWebMvc
Ajout Intercepteur
@EnableWebMvc
Ajout Intercepteur

Configuration de ViewController
@EnableWebMvc
Ajout Intercepteur

Configuration de ViewController

 Ajout de ResourceHandler
@EnableWebMvc
Ajout Intercepteur

Configuration de ViewController

 Ajout de ResourceHandler
@EnableWebMvc
Ajout Intercepteur

Configuration de ViewController

 Ajout de ResourceHandler



Ne permet pas une configuration fine
@EnableWebMvc
 Ajout Intercepteur

 Configuration de ViewController

  Ajout de ResourceHandler



 Ne permet pas une configuration fine

➡ @EnableWebMvc et étendre
 WebMvcConfigurationSupport
@Enable*
@Enable*

EnableAsync

EnableAspectJAutoProxy

EnableSpringConfigured

EnableLoadTimeWeaving

EnableTransactionManagement
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   }
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   }
Servlet 3.0
 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
DEMO
Spring 3.1 bis
@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 }
<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>
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>
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>
Spring 3.1, c’est aussi

Support Hibernate 4

Namespace c:

JPA sans Persistence.xml

...
Spring 3.2
Spring 3.2
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 est mort ?
Spring en 2003



     Framework
Spring en 2012

                  Batch
 SpringData                                       SpringMobile

                         Framework
          Integration


                        Security     Flex
SpringAndroid                               SpringSocial
Conclusions
Questions ?

More Related Content

Recently uploaded

Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Pitangent Analytics & Technology Solutions Pvt. Ltd
 
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptxPRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
christinelarrosa
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
operationspcvita
 
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
DanBrown980551
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
Neo4j
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
Antonios Katsarakis
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
Ivo Velitchkov
 
ScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking ReplicationScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking Replication
ScyllaDB
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
Fwdays
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
Mydbops
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Neo4j
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
DianaGray10
 
Christine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptxChristine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptx
christinelarrosa
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance PanelsNorthern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving
 
Demystifying Knowledge Management through Storytelling
Demystifying Knowledge Management through StorytellingDemystifying Knowledge Management through Storytelling
Demystifying Knowledge Management through Storytelling
Enterprise Knowledge
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
Alex Pruden
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
Miro Wengner
 

Recently uploaded (20)

Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
 
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptxPRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
 
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
 
ScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking ReplicationScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking Replication
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
 
Christine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptxChristine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptx
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance PanelsNorthern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
 
Demystifying Knowledge Management through Storytelling
Demystifying Knowledge Management through StorytellingDemystifying Knowledge Management through Storytelling
Demystifying Knowledge Management through Storytelling
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
 

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
Marius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
Expeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
Pixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
marketingartwork
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
Skeleton Technologies
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
SpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Lily Ray
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
Christy Abraham Joy
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
Vit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
MindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Spring&amp;lt;xml&gt; est mort, Vive Spring NoXML @ ParisJUG

  • 1. Spring<XML> est mort Vive Spring NoXML par Gildas Cuisinier @gcuisinier
  • 2. whois(@gcuisinier) 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 )
  • 4. Spring ? es nc da en AO ép P ed nd tio ec Inj Abstraction de services
  • 8. Spring 1.0 1 <bean id="monBean" class="be.hikage.service.MyService"> 2 <property name="version" value="maVersion"/> 3 </bean> 4 5 <bean />
  • 9. 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 />
  • 11. Spring 1.2 1 <bean id="monBean" class="be.hikage.service.MyService"> 2 <property name="version" value="maVersion"/> 3 </bean> 4
  • 12. 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"/>
  • 14. "> Proxy xy" lter Chain inPro il.Fi Sourc e "> filt erCha curi ty.ut ition an id =" g.ace gise Defin 1 <be s="or ation clas lter Invoc e="fi PARIS ON 2 ert y nam E_COM <prop ASE_B EFOR 3 lue> OWERC <v a _TO_L T_URL NT 4 C ONVER CHE_A P E_APA RN_TY 5 PATTE er nFilt n = nteg ratio 6 /logi textI essi onCon 7 httpS lter rm= ionFi in.fo egrat 8 /log xtInt Conte e ssion 9 httpS ter = onFil ts/** Inte grati 10 /asse ntext ess ionCo eck= 11 httpS ty_ch er, ecuri nFilt eg i_s nteg ratio 12 /j_ac textI er onCon gFilt essi Proc essin 13 httpS ation uth entic 14 formA er, nFilt nteg ratio 15 /**= textI essi onCon lter 16 httpS ionFi ra nslat tionT 17 excep ue> 18 < /v a l r"> 19 roper ty> lter" Filte </p ionFi tegr ation egrat extIn 20 n> onte xtInt ssio nCont </bea sionC ttpSe 1 tpSes y...H 2 id="h t curit <bean egise 22 ="o rg.ac class Point "> 23 t" lter Entry </bea n> yPoin ingFi 24 atio nEntr onPr ocess entic icati Logi nAuth ..Au thent "/> 25 "form rity. login n id= isecu ue="/ <bea .aceg mUrl" val 26 ="org inFor e"/> class og "fals me="l alue= 27 erty na ps" v <prop ceHtt name ="for 28 erty <prop 29 n> </bea 30
  • 15. 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>
  • 16. Spring 2.5 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 }
  • 17. Spring 2.5 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 } 1 <context:component-scan base-package="be.hikage" />
  • 18. Spring 3.0 1 @Configuration 2 public class ApplicationConfig { 3 4 @Bean 5 public MyService myService() { 6 return new MyService(); 7 } 8 9 }
  • 19. 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 }
  • 20. 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)
  • 21. Spring 3.0 1 @Component 2 public class MyTask { 3 4 @Scheduled(cron="* * * * *") 5 public void execute() { 6 // code 7 } 8 9 }
  • 22. 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" .. />
  • 23. 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" .. />
  • 25. @ComponentScan 1 <context:component-scan base-package="be.hikage"/> 1 @Configuration 2 @ComponentScan("be.hikage") 3 public class ApplicationConfig
  • 26. @ComponentScan 1 <context:component-scan base-package="be.hikage"/> 1 @Configuration 2 @ComponentScan("be.hikage") 3 public class ApplicationConfig
  • 27. @EnableScheduling 1 public class MaTache { 2 3 @Scheduled(fixedRate = 1000) 4 public void execute() { 5 System.out.println("Maman, je parle au ParisJUG"); 6 } 7 }
  • 29. @EnableScheduling 1 <task:annotation-driven /> 1 @Configuration 2 @EnableScheduling 3 public class ApplicationConfig { 4 }
  • 30. @EnableScheduling 1 @Target(ElementType.TYPE) 2 @Retention(RetentionPolicy.RUNTIME) 3 @Import(SchedulingConfiguration.class) 4 @Documented 5 public @interface EnableScheduling { 6 7 }
  • 31. @EnableScheduling 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 }
  • 32. @EnableCaching 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 }
  • 33. @EnableCaching 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 }
  • 34. @EnableCaching 1 <caching:annotation-driven /> 2 3 <bean class="org.springframework.cache .concurrent.ConcurrentMapCacheManager"/> 4
  • 35. @EnableCaching 1 @Configuration 2 @EnableCaching 3 public class ApplicationConfig { 4 5 @Bean 6 CacheManager cacheManager(){ 7 return 8 new ConcurrentMapCacheManager(); 9 } 10 }
  • 36. Abstraction de Cache Out of the Box ConcurrentHashMap EhCache GemFire JCache (Spring 3.2/3.3)
  • 38. @EnableWebMvc 1 <mvc:annotation-driven /> 1 @Configuration 2 @EnableWebMvc 3 public class WebConfig { 4 }
  • 39. @EnableWebMvc 1 <mvc:annotation-driven/> 2 <mvc:interceptors> 3 <bean class="osf..LocaleChangeInterceptor"/> 4 </mvc:interceptors>
  • 40. @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 }
  • 44. @EnableWebMvc Ajout Intercepteur Configuration de ViewController Ajout de ResourceHandler
  • 45. @EnableWebMvc Ajout Intercepteur Configuration de ViewController Ajout de ResourceHandler
  • 46. @EnableWebMvc Ajout Intercepteur Configuration de ViewController Ajout de ResourceHandler Ne permet pas une configuration fine
  • 47. @EnableWebMvc Ajout Intercepteur Configuration de ViewController Ajout de ResourceHandler Ne permet pas une configuration fine ➡ @EnableWebMvc et étendre WebMvcConfigurationSupport
  • 50. 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 }
  • 51. 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 }
  • 52. Servlet 3.0 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
  • 53. DEMO
  • 55. @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 }
  • 56. <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>
  • 57. 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>
  • 58. 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>
  • 59. Spring 3.1, c’est aussi Support Hibernate 4 Namespace c: JPA sans Persistence.xml ...
  • 61. Spring 3.2 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
  • 63. Spring en 2003 Framework
  • 64. Spring en 2012 Batch SpringData SpringMobile Framework Integration Security Flex SpringAndroid SpringSocial

Editor's Notes

  1. \n
  2. \n
  3. Comment d&amp;#xE9;finir Spring ?\n\nSpring est un conteneur, qui fournit 3 fonctionnalit&amp;#xE9;s principales\n* Injection, IoC, gestion du cycle de vie des objets\n* AOP, permettant de s&amp;#xE9;parer les fonctionnalit&amp;#xE9;s transversales\n* Abstraction permettant de simplifier l&amp;#x2019;utiliser de biblioth&amp;#xE8;que tierce ( JMS, JDBC, Hibernate) en proposant des unifirmisations d&amp;#x2019;exception, .. \n
  4. Comment d&amp;#xE9;finir Spring ?\n\nSpring est un conteneur, qui fournit 3 fonctionnalit&amp;#xE9;s principales\n* Injection, IoC, gestion du cycle de vie des objets\n* AOP, permettant de s&amp;#xE9;parer les fonctionnalit&amp;#xE9;s transversales\n* Abstraction permettant de simplifier l&amp;#x2019;utiliser de biblioth&amp;#xE8;que tierce ( JMS, JDBC, Hibernate) en proposant des unifirmisations d&amp;#x2019;exception, .. \n
  5. Comment d&amp;#xE9;finir Spring ?\n\nSpring est un conteneur, qui fournit 3 fonctionnalit&amp;#xE9;s principales\n* Injection, IoC, gestion du cycle de vie des objets\n* AOP, permettant de s&amp;#xE9;parer les fonctionnalit&amp;#xE9;s transversales\n* Abstraction permettant de simplifier l&amp;#x2019;utiliser de biblioth&amp;#xE8;que tierce ( JMS, JDBC, Hibernate) en proposant des unifirmisations d&amp;#x2019;exception, .. \n
  6. Comment d&amp;#xE9;finir Spring ?\n\nSpring est un conteneur, qui fournit 3 fonctionnalit&amp;#xE9;s principales\n* Injection, IoC, gestion du cycle de vie des objets\n* AOP, permettant de s&amp;#xE9;parer les fonctionnalit&amp;#xE9;s transversales\n* Abstraction permettant de simplifier l&amp;#x2019;utiliser de biblioth&amp;#xE8;que tierce ( JMS, JDBC, Hibernate) en proposant des unifirmisations d&amp;#x2019;exception, .. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. Ce fut &amp;#xE9;galement l&amp;#x2019;un des premiers framework &amp;#xE0; utiliser les annotations\n
  27. \n
  28. Permet de r&amp;#xE9;duire le XML, simplifie la compr&amp;#xE9;hension ..\nMais est nettement plus obscure .. Qu&amp;#x2019;est-ce qui se cache derri&amp;#xE8;re\n
  29. @Component / @Service / @Controller\n@RequestMapping\n@AutoWired\n
  30. Configuration en Java\n--&gt; Meilleur refactoring\n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. Plus de clart&amp;#xE9; ( ALT+CLick dans IDE)\n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. @SlowService\n@CachePut\n@Caching(@CacheEvict(&amp;#xAB;primary&amp;#xBB;), @CacheEvict(&amp;#xAB;secondary&amp;#xBB;, &amp;#xAB;otherkey&amp;#xBB;))\n\n
  46. \n
  47. \n
  48. Etendre de WebMvcConfigurer et overrider les m&amp;#xE9;thodes n&amp;#xE9;cessaires\n
  49. Etendre de WebMvcConfigurer et overrider les m&amp;#xE9;thodes n&amp;#xE9;cessaires\n
  50. Etendre de WebMvcConfigurer et overrider les m&amp;#xE9;thodes n&amp;#xE9;cessaires\n
  51. Etendre de WebMvcConfigurer et overrider les m&amp;#xE9;thodes n&amp;#xE9;cessaires\n
  52. Etendre de WebMvcConfigurer et overrider les m&amp;#xE9;thodes n&amp;#xE9;cessaires\n
  53. Etendre de WebMvcConfigurer et overrider les m&amp;#xE9;thodes n&amp;#xE9;cessaires\n
  54. Etendre de WebMvcConfigurer et overrider les m&amp;#xE9;thodes n&amp;#xE9;cessaires\n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. WebApplicationInitializer vs ServletContainerInitializer\n\n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n