spring java configuration

Post on 11-Jun-2015

859 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

FactoryBeanBean

definitions

BeanFactoryPostProcesso

rs

Instantiation

Dependency Injection

BeanPostProcessors

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

FactoryBeanXML Bean definitions

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

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

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

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

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

@Beanpublic 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

@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;}

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 />

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);

}

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

top related