Spring java configuration

  • 567 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
567
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
14
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Spring Java configuration Jakub Kohout, June 2013
  • 2. Osnova  Konfigurace Springu  Bean lifecycle  Typy konfigurace  XML  Anotace  Java code  Ukázka  Shrnutí Spring Java configuration
  • 3. Konfigurace Springu Spring Java configuration
  • 4. 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
  • 5. Bean lifecycle Spring Java configuration
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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; }
  • 19. 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; }
  • 20. 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 />
  • 21. 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); }
  • 22. 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("/"); } }
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. Otázky? Spring Java configuration