• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Spring java configuration
 

Spring java configuration

on

  • 516 views

 

Statistics

Views

Total Views
516
Views on SlideShare
516
Embed Views
0

Actions

Likes
0
Downloads
10
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Spring java configuration Spring java configuration Presentation Transcript

    • Spring Java configuration Jakub Kohout, June 2013
    • Osnova  Konfigurace Springu  Bean lifecycle  Typy konfigurace  XML  Anotace  Java code  Ukázka  Shrnutí Spring Java configuration
    • Konfigurace Springu Spring Java configuration
    • Konfigurace Springu  Poskytuje rozsáhlou infrastrukturu pro vývoj Java enterprise aplikací  Spring != spring framework >> Spring == spring-*  spring framework  spring-security  spring-integration  spring-batch  spring-data-*  spring-roo  spring-social  spring-mobile  spring-ws  spring-amqp  …  Vývojář se stará jen o business logiku Spring Java configuration
    • Bean lifecycle Spring Java configuration
    • Bean lifecycle Spring Java configuration FactoryBean Bean definitions BeanFactoryPo stProcessors Instantiation Dependency Injection BeanPostProce ssors Application ready to use Spring container POJO + 3rd. party libraries
    • Typy konfigurace -XML <beans xmlns="http://www.springframework.org/schema/beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=“http://www.springframework.org/schema/beans http://"> <bean class=“cz.test.project.service.PrintService" id="printService"> <property name=“…" value=“…"/> </bean> </beans> Spring Java configuration FactoryBean XML Bean definitions
    • Typy konfigurace -XML Výhody  Jednoduchost  Konzistentní způsob konfigurace  Fail fast konfigurace  Flexibilita - široké možnosti konfigurace bean <bean id="printService" class="cz.test.project.PrintService" init-method="initIt" destroy-method="cleanUp"> <property name="..." value="…" /> </bean>  Podpora modularity <import resource="data-access.xml" /> Spring Java configuration
    • Typy konfigurace -XML Nevýhody  Verbose (ukecanost)  Není type safe  Potřeba speciálního editoru  Nelze volat jiné metody než setry, konstruktory  Někdo prostě nemá rád XML  Spring Java configuration
    • Typy konfigurace -XML XML namespaces <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task=http://www.springframework.org/schema/task … <context:property-placeholder location="classpath*:META- INF/spring/*.properties,classpath*:*.properties“> <context:spring-configured /> <aop:aspectj-autoproxy /> <task:annotation-driven /> <tx:annotation-driven transaction-manager="transactionManager" /> Spring Java configuration
    • Typy konfigurace –XML + @ od Spring 2.5  JSR 250 (@PreDestroy, @PostConstruct …)  <context:annotationConfig />  @Autowired, @Component  <context:component-scan base-package="cz.test.project.service" /> @Repository public class PrintRepository { … } @Service public class PrintServiceImpl implements PrintService { @Autowired private PrintRepository printRepository; public void savePrint(Print print) { printRepository.save(print); } } Spring Java configuration FactoryBean XML Bean +Annotations
    • Typy konfigurace –XML + @ Výhody  Odstraňuje spoustu bean definic v XML  V případě změny bean není nutné měnit XML definice Spring Java configuration
    • Typy konfigurace –XML + @ Nevýhody  Nelze použít pro konfiguraci komponent třetích stran  K zapnutí podpory anotací je potřeba definice v XML  Ztráta přehledu o definovaných beanách  Správně definování component-scannu  Může dojít k dvojznačnostem  Lze použít @Qualifier  Component scan je časově náročnější Spring Java configuration
    • Typy konfigurace – Java code + @ od Spring 3.0  Nahrazuje veškerou konfiguraci v XML ! @Configuration public class RootApplicationContext { @Bean public PrintService printService() { return new PrintServiceImpl(); } } Spring Java configuration FactoryBean @Bean methods
    • Typy konfigurace – Java code + @ @Configuration @ComponentScan(basePackages = { "cz.test.project.service" }) @Import(DatabaseConfiguration.class) public class RootApplicationContext { }  Detekce @Configuration  Předáním konstruktoru ApplicationContext  Metoda register()  Component-scan  Potřeba CGLib knihovny  Beany defaultně singleton  Beany musí mít defaultní konstruktor Spring Java configuration
    • Typy konfigurace – Java code + @  Použití konstruktoru, nebo metody register() public static void main(final String[] args) { final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext( RootApplicationContext.class); context.register(DatabaseConfiguration.class); context.refresh(); final PrintService printService = context.getBean(PrintService.class); printService.sayHello(); } Spring Java configuration
    • Typy konfigurace – Java code + @  Použití component scanu public static void main(final String[] args) { final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.scan("cz.test.project.config"); context.refresh(); final PrintService printService = context.getBean(PrintService.class); printService.sayHello(); } Spring Java configuration
    • Typy konfigurace – Java code + @ Spring Java configuration  Konfigurace JPA @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { final LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean(); entityManagerFactory.setDataSource(dataSource()); entityManagerFactory.setPersistenceXmlLocation("classpath:META- INF/persistence.xml"); return entityManagerFactory; }
    • Typy konfigurace – Java code + @ Spring Java configuration  Konfigurace JPA bez persistence.xml @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { final LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean(); entityManagerFactory.setDataSource(dataSource()); entityManagerFactory.setPackagesToScan("cz.test.project.domain"); entityManagerFactory.setPersistenceProviderClass(HibernatePersistence.class); entityManagerFactory.setJpaProperties(new Properties() { private static final long serialVersionUID = 1L; { setProperty("hibernate.hbm2ddl.auto", "update"); setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); }; }); return entityManagerFactory; }
    • Typy konfigurace – Java code + @ Spring Java configuration  Konfigurace webové aplikace @Configuration @ComponentScan(basePackages = { "cz.test.project.web" }) @EnableWebMvc public class WebApplicationContext extends WebMvcConfigurerAdapter { @Bean public InternalResourceViewResolver viewResolver() { final InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; } }  @EnableWebMvc  nahrazuje <mvc:annotation-driven />
    • Typy konfigurace – Java code + @ Spring Java configuration  WebMvcConfigurerAdapter @Override public void addFormatters(FormatterRegistry registry) { // TODO Auto-generated method stub super.addFormatters(registry); } @Override public void addInterceptors(InterceptorRegistry registry) { // TODO Auto-generated method stub super.addInterceptors(registry); } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { // TODO Auto-generated method stub super.configureMessageConverters(converters); }
    • Typy konfigurace – Java code + @ Spring Java configuration  Konfigurace webové aplikace bez web.xml !  WebApplicationInitializer – konfigrace servlet contextu  Pouze v Servlet 3.0+  V dependencies musí být spring-web knihovny public class WebAppInitilizer implements WebApplicationInitializer { public void onStartup(final ServletContext context) throws ServletException { final AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); rootContext.register(RootApplicationContext.class); context.addListener(new ContextLoaderListener(rootContext)); final AnnotationConfigWebApplicationContext webContext = new AnnotationConfigWebApplicationContext(); webContext.register(WebApplicationContext.class); final ServletRegistration.Dynamic dispatcher = context.addServlet("java-configuration", new DispatcherServlet(webContext)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); } }
    • Typy konfigurace – Java code + @ Spring Java configuration  Konfigurace spring-data  @EnableJpaRepositories(basePackages = { "cz.test.project.repository" })  <jpa:repositories base-package="cz.test.project.repository" />  Konfigurace transakcí  @EnableTransactionManagement  <tx:annotation-driven transaction-manager="transactionManager" />  Konfigurace schedulerů  @EnableScheduling  <task:annotation-driven />  Konfigurace aspektů  @EnableAspectJAutoProxy  <aop:aspectj-autoproxy />  Konfigurace cache  @EnableCaching
    • Typy konfigurace – Java code + @ Spring Java configuration  Výhody  Ke konfiguraci lze použít jakékoliv metody (ne jen modifikátory a konstruktory)  Větší kontrola nad konfigurovanými objekty  Více type safe  Konzistentní způsob konfigurace  Není potřeba XML
    • Shrnutí Spring Java configuration  XML  Definice infrastrukturních bean (neměnících se)  Datasource transaction manager, … + Cetralizovaná konfigurace + Jednoduché, známé – Omezené možnosti  Anotace  Vhodné pro často se měnící beany  service, controller, dao / repository + Editace pouze na jednom místě + Rychlý vývoj – Možnost „oanotovat“ pouze vlastní třídy  Java konfigurace  Kompletní kontrola vytváření instancí a konfigurace + Konfigurace není míchána s ostatním kódem + Vhodné pro Legacy code
    • Otázky? Spring Java configuration