Spring Java
configuration
Jakub Kohout, June 2013
Osnova
 Konfigurace Springu
 Bean lifecycle
 Typy konfigurace
 XML
 Anotace
 Java code
 Ukázka
 Shrnutí
Spring Jav...
Konfigurace Springu
Spring Java configuration
Konfigurace Springu
 Poskytuje rozsáhlou infrastrukturu pro vývoj Java
enterprise aplikací
 Spring != spring framework >...
Bean lifecycle
Spring Java configuration
Bean lifecycle
Spring Java configuration
FactoryBean
Bean
definitions
BeanFactoryPo
stProcessors
Instantiation
Dependency
...
Typy konfigurace -XML
<beans xmlns="http://www.springframework.org/schema/beans
xmlns:xsi="http://www.w3.org/2001/XMLSchem...
Typy konfigurace -XML
Výhody
 Jednoduchost
 Konzistentní způsob konfigurace
 Fail fast konfigurace
 Flexibilita - širo...
Typy konfigurace -XML
Nevýhody
 Verbose (ukecanost)
 Není type safe
 Potřeba speciálního editoru
 Nelze volat jiné met...
Typy konfigurace -XML
XML namespaces
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.spri...
Typy konfigurace –XML + @
od Spring 2.5
 JSR 250 (@PreDestroy, @PostConstruct …)
 <context:annotationConfig />
 @Autowi...
Typy konfigurace –XML + @
Výhody
 Odstraňuje spoustu bean definic v XML
 V případě změny bean není nutné měnit XML
defin...
Typy konfigurace –XML + @
Nevýhody
 Nelze použít pro konfiguraci komponent třetích stran
 K zapnutí podpory anotací je p...
Typy konfigurace – Java code + @
od Spring 3.0
 Nahrazuje veškerou konfiguraci v XML !
@Configuration
public class RootAp...
Typy konfigurace – Java code + @
@Configuration
@ComponentScan(basePackages = { "cz.test.project.service" })
@Import(Datab...
Typy konfigurace – Java code + @
 Použití konstruktoru, nebo metody register()
public static void main(final String[] arg...
Typy konfigurace – Java code + @
 Použití component scanu
public static void main(final String[] args) {
final Annotation...
Typy konfigurace – Java code + @
Spring Java configuration
 Konfigurace JPA
@Bean
public LocalContainerEntityManagerFacto...
Typy konfigurace – Java code + @
Spring Java configuration
 Konfigurace JPA bez persistence.xml
@Bean
public LocalContain...
Typy konfigurace – Java code + @
Spring Java configuration
 Konfigurace webové aplikace
@Configuration
@ComponentScan(bas...
Typy konfigurace – Java code + @
Spring Java configuration
 WebMvcConfigurerAdapter
@Override
public void addFormatters(F...
Typy konfigurace – Java code + @
Spring Java configuration
 Konfigurace webové aplikace bez web.xml !
 WebApplicationIni...
Typy konfigurace – Java code + @
Spring Java configuration
 Konfigurace spring-data
 @EnableJpaRepositories(basePackages...
Typy konfigurace – Java code + @
Spring Java configuration
 Výhody
 Ke konfiguraci lze použít jakékoliv metody (ne jen
m...
Shrnutí
Spring Java configuration
 XML
 Definice infrastrukturních bean (neměnících se)
 Datasource transaction manager...
Otázky?
Spring Java configuration
Upcoming SlideShare
Loading in …5
×

Spring java configuration

1,057
-1

Published on

Published in: Technology, News & Politics
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,057
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
24
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Spring java configuration

  1. 1. Spring Java configuration Jakub Kohout, June 2013
  2. 2. Osnova  Konfigurace Springu  Bean lifecycle  Typy konfigurace  XML  Anotace  Java code  Ukázka  Shrnutí Spring Java configuration
  3. 3. Konfigurace Springu Spring Java configuration
  4. 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. 5. Bean lifecycle Spring Java configuration
  6. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 26. Otázky? Spring Java configuration
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×