Spring java configuration
-
Upload
jakub-kohout -
Category
Technology
-
view
837 -
download
1
Transcript of Spring java configuration
![Page 1: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/1.jpg)
Spring Java configuration Jakub Kohout, June 2013
![Page 2: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/2.jpg)
Osnova Konfigurace Springu
Bean lifecycle Typy konfigurace
XML Anotace Java code
Ukázka Shrnutí
Spring Java configuration
![Page 3: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/3.jpg)
Konfigurace Springu
Spring Java configuration
![Page 4: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/4.jpg)
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
![Page 5: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/5.jpg)
Bean lifecycle
Spring Java configuration
![Page 6: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/6.jpg)
Bean lifecycle
Spring Java configuration
FactoryBeanBean
definitions
BeanFactoryPostProcesso
rs
Instantiation
Dependency Injection
BeanPostProcessors
Application ready to use
Spring container
POJO + 3rd. party libraries
![Page 7: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/7.jpg)
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
FactoryBeanXML Bean definitions
![Page 8: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/8.jpg)
Typy konfigurace -XMLVý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
![Page 9: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/9.jpg)
Typy konfigurace -XMLNevý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
![Page 10: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/10.jpg)
Typy konfigurace -XMLXML 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
![Page 11: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/11.jpg)
Typy konfigurace –XML + @
od Spring 2.5 JSR 250 (@PreDestroy, @PostConstruct …)
<context:annotationConfig />
@Autowired, @Component <context:component-scan base-package="cz.test.project.service" />
@Repositorypublic class PrintRepository {
…}
@Servicepublic class PrintServiceImpl implements PrintService {
@Autowiredprivate PrintRepository printRepository;
public void savePrint(Print print) {printRepository.save(print);
}}
Spring Java configuration
FactoryBeanXML Bean
+Annotations
![Page 12: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/12.jpg)
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
![Page 13: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/13.jpg)
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
![Page 14: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/14.jpg)
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
![Page 15: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/15.jpg)
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
![Page 16: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/16.jpg)
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
![Page 17: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/17.jpg)
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
![Page 18: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/18.jpg)
Typy konfigurace – Java code + @
Spring Java configuration
Konfigurace JPA
@Beanpublic LocalContainerEntityManagerFactoryBean entityManagerFactory() {
final LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();entityManagerFactory.setDataSource(dataSource());entityManagerFactory.setPersistenceXmlLocation("classpath:META-INF/persistence.xml");
return entityManagerFactory;}
![Page 19: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/19.jpg)
Typy konfigurace – Java code + @
Spring Java configuration
Konfigurace JPA bez persistence.xml
@Beanpublic 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;}
![Page 20: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/20.jpg)
Typy konfigurace – Java code + @
Spring Java configuration
Konfigurace webové aplikace
@Configuration@ComponentScan(basePackages = { "cz.test.project.web" })@EnableWebMvcpublic class WebApplicationContext extends WebMvcConfigurerAdapter {
@Beanpublic InternalResourceViewResolver viewResolver() {
final InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");return resolver;
}
}
@EnableWebMvc nahrazuje <mvc:annotation-driven />
![Page 21: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/21.jpg)
Typy konfigurace – Java code + @
Spring Java configuration
WebMvcConfigurerAdapter
@Overridepublic void addFormatters(FormatterRegistry registry) {
// TODO Auto-generated method stubsuper.addFormatters(registry);
}
@Overridepublic void addInterceptors(InterceptorRegistry registry) {
// TODO Auto-generated method stubsuper.addInterceptors(registry);
}
@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// TODO Auto-generated method stubsuper.configureMessageConverters(converters);
}
![Page 22: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/22.jpg)
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("/");
}}
![Page 23: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/23.jpg)
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
![Page 24: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/24.jpg)
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
![Page 25: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/25.jpg)
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
![Page 26: Spring java configuration](https://reader036.fdocuments.in/reader036/viewer/2022062300/55790295d8b42a675b8b50c3/html5/thumbnails/26.jpg)
Otázky?
Spring Java configuration