Lightweight Enterprise Java Development using Spring Framework Oleksiy Rezchykov Eugene Scripnik
May 10, 2015
Lightweight Enterprise Java Development
using Spring Framework
Oleksiy RezchykovEugene Scripnik
SpringByExample.com.ua @ua_spring #uadevclub
2
About us Software Engineers
Working with Spring since 2006
Pragmatic programmers
SpringByExample.com.ua founders
SpringByExample.com.ua @ua_spring #uadevclub
3
Contents Spring origins
IoC using Spring
Persistence with Spring
Declarative caching using @Cachable
Web applications with Spring MVC
Spring ecosystem
Framework criticism
4
J2EE 5 Development
SpringByExample.com.ua @ua_spring #uadevclub
SpringByExample.com.ua @ua_spring #uadevclub
5
SpringFramework history
In October 2002 Rod Johnson wrote his famous book
The first milestone release 1.0 - June 2004
Company renamed from Interface21 to SpringSource in 2007
SpringSource acquired by VMWare in 2009
Rod Johnson left VMWare – July 2012
SpringByExample.com.ua @ua_spring #uadevclub
6
Inversion of Control Inversion of regular approach where object
was responsible for satisfying it’s own dependencies
Implementation of Dependency Injection
Container instantiates and wires dependencies
SpringByExample.com.ua @ua_spring #uadevclub
7
Injection types Setter injection– when you are using setter to
fulfill bean dependency
Constructor injection – when constructor is called to set-up a bean with dependencies
Method injection
SpringByExample.com.ua @ua_spring #uadevclub
8
Context An object which contains beans declarations
with their dependencies
BeanFactory interface implementation
SpringByExample.com.ua @ua_spring #uadevclub
9
XML namespaces
SpringByExample.com.ua @ua_spring #uadevclub
10
Context
SpringByExample.com.ua @ua_spring #uadevclub
11
Context usage
SpringByExample.com.ua @ua_spring #uadevclub
12
Bean lifecycle Depends on scope and lazy initialization
Main bean scopes:
Singleton and Prototype
(Also there are multiple web scopes)
SpringByExample.com.ua @ua_spring #uadevclub
13
Bean instantiation order
SpringByExample.com.ua @ua_spring #uadevclub
14
Bean Post-processingBea
n instantiation
• Bean instantiated for singletons with eager initialization
Dependency
injection
• Dependencies are injected into beans
Bean
post-
processing
• Bean post-processing actions• You can put your custom logic
in here
SpringByExample.com.ua @ua_spring #uadevclub
15
Map, List, Set, Prop, Null
SpringByExample.com.ua @ua_spring #uadevclub
16
Map, List, Set, Prop, Null
SpringByExample.com.ua @ua_spring #uadevclub
17
Util namespace
SpringByExample.com.ua @ua_spring #uadevclub
18
Component model
SpringByExample.com.ua @ua_spring #uadevclub
19
@Autowired Spring proprietary annotation for property
injection
Supports @Qualifier to select implementation by name if more than one exists in context
Has required parameter to enforce dependency loading
SpringByExample.com.ua @ua_spring #uadevclub
20
@Autowired
SpringByExample.com.ua @ua_spring #uadevclub
21
@Inject Context and Dependency Injection (CDI)
standard JSR-299
SpringByExample.com.ua @ua_spring #uadevclub
22
@Resource JSR 250 (Common annotations)
Supports @PostConstruct and @PreDestroy as well
SpringByExample.com.ua @ua_spring #uadevclub
23
Resource loading and i18n
SpringByExample.com.ua @ua_spring #uadevclub
24
Resource loading and i18n
SpringByExample.com.ua @ua_spring #uadevclub
25
SpEl Stands for Spring Expression Language
Can be used in the xml context
Can be used in bean classes
SpringByExample.com.ua @ua_spring #uadevclub
26
SpEl
SpringByExample.com.ua @ua_spring #uadevclub
27
Java Spring Config @Configuration
@Bean
Support for Environment and Profiles
SpringByExample.com.ua @ua_spring #uadevclub
28
Java Spring Config
SpringByExample.com.ua @ua_spring #uadevclub
29
Environment abstraction & context
profiles Environment abstraction introduced in Spring 3.1
Can be declaratively and programmatically configured
Affects property resolution
Affects bean profiles
SpringByExample.com.ua @ua_spring #uadevclub
30
Environment abstraction & context
profiles
SpringByExample.com.ua @ua_spring #uadevclub
31
AOPA programming paradigm which allows to separate cross-cutting concerns
Cross-cutting logic:
Logging
Tracing
Security
SpringByExample.com.ua @ua_spring #uadevclub
32
AOP Aspect
Advice
Join point
Pointcut
SpringByExample.com.ua @ua_spring #uadevclub
33
AOP
SpringByExample.com.ua @ua_spring #uadevclub
34
Spring AOP Spring AOP defaults to using standard J2SE
dynamic proxies for AOP proxies. This enables any interface (or set of interfaces) to be proxied.
Spring AOP can also use CGLIB proxies. This is necessary to proxy classes, rather than interfaces
It is good practice to program to interfaces rather than classes, business classes normally will implement one or more business interfaces.
SpringByExample.com.ua @ua_spring #uadevclub
35
AspectJ Spring AOP is often uses the AspectJ
declaration style
AspectJ itself uses Load Time Weaving (LTW) to modify the bean code according to Aspect logic
LTW could do much more than dynamic proxies but it is more time-consuming operation. This means that LTW has a performance drawback.
SpringByExample.com.ua @ua_spring #uadevclub
36
“pure” AspectJ
SpringByExample.com.ua @ua_spring #uadevclub
37
“pure” AspectJ
SpringByExample.com.ua @ua_spring #uadevclub
38
Persistence with Spring
Building DAO
Spring Data
Embedded Datasources
JDBC vs ORM DAO’s
Integration testing with Spring
@Transactional & transactions with Spring
SpringByExample.com.ua @ua_spring #uadevclub
39
Spring supports JDBC
JPA
JDO
Concrete ORM
SpringByExample.com.ua @ua_spring #uadevclub
40
Spring Data RDBMS: JPA, JDBC Extensions
BigData: ApacheHadoop
DataGrid: GermFire
HTTP: REST
Key-value stores: Redis
Document Stores: MongoDB
Graph Databases: Neo4j
Column stores: Hbase
SpringByExample.com.ua @ua_spring #uadevclub
41
Persistence layer
Service
• Persistence service which has domain specific logic
Repository (DAO)
• Spring JDBCTemplate• SessionFactory, EntityManagerFactory• Redis/Mongo template
DB
• RDBMS (or NoSQL)
SpringByExample.com.ua @ua_spring #uadevclub
42
JDBCTemplate Useful interface
No boilerplate code
Exception handling
SpringByExample.com.ua @ua_spring #uadevclub
43
JDBCTemplate
SpringByExample.com.ua @ua_spring #uadevclub
44
JDBC namespace
SpringByExample.com.ua @ua_spring #uadevclub
45
Spring Data JPA CRUD
SpringByExample.com.ua @ua_spring #uadevclub
46
Spring Data JPA Query DSL
SpringByExample.com.ua @ua_spring #uadevclub
47
Transactions in Spring
Support for ACID transactions
Declarative and programmatic
SpringByExample.com.ua @ua_spring #uadevclub
48
Transaction managers
Spring support both container managed and framework managed transactions
Managers:
DataSourceTransactionManager
HibernateTransactionManager
JPATransactionManager
JTATransactionManager
SpringByExample.com.ua @ua_spring #uadevclub
49
@Transactional Transaction propagation
Read-only transactions
Built using Spring AOP
SpringByExample.com.ua @ua_spring #uadevclub
50
Persistence layer testing
Context loading in test
Environment abstraction and profiles usage
Transactional methods
Embedded data source could be used
SpringByExample.com.ua @ua_spring #uadevclub
51
Persistence layer testing
SpringByExample.com.ua @ua_spring #uadevclub
52
@Cacheable One-two-three magic (not always work as
expected)
Support for JCache (JSR-107)
SpringByExample.com.ua @ua_spring #uadevclub
53
@Cacheable <cache:annotation-driven> or
@EnableCaching
CacheManager instance in the context
@Cacheable, @CachePut, @CacheEvict
SpringByExample.com.ua @ua_spring #uadevclub
54
Spring MVC Application context
Dispatcher Servlet and it’s context
Controllers and mappings
Implementing CRUD logic
REST
Testing MVC
SpringByExample.com.ua @ua_spring #uadevclub
55
Application & Dispatcher servlet
context
SpringByExample.com.ua @ua_spring #uadevclub
56
Front controller and MVC
SpringByExample.com.ua @ua_spring #uadevclub
57
URL mappings @RequestMapping
SpringByExample.com.ua @ua_spring #uadevclub
58
View resolvers AbstractCachingViewResolver
XmlViewResolver
ResourceBundleViewResolver
UrlBasedViewResolver
InternalResourceViewResolver
VelocityViewResolver / FreeMarkerViewResolver
ContentNegotiatingViewResolver
SpringByExample.com.ua @ua_spring #uadevclub
59
View resolvers
SpringByExample.com.ua @ua_spring #uadevclub
60
CRUD in one place
SpringByExample.com.ua @ua_spring #uadevclub
61
REST in Spring MVC Starting Spring 3.1.x
ContentNegotiatingViewResolver
@ResponseBody combined with produces
@RequestBody combined with consumes
SpringByExample.com.ua @ua_spring #uadevclub
62
REST in Spring MVC
SpringByExample.com.ua @ua_spring #uadevclub
63
Testing MVC Starting from Spring 3.2
spring-test-mvc project
Server-side Spring MVC tests
New Spring Mocks
Different strategies
SpringByExample.com.ua @ua_spring #uadevclub
64
Testing MVC
SpringByExample.com.ua @ua_spring #uadevclub
65
Testing MVC
SpringByExample.com.ua @ua_spring #uadevclub
66
Just to mention Type conversion
Formatter SPI
SpringByExample.com.ua @ua_spring #uadevclub
67
Just to mention Type conversion
Formatter SPI
SpringByExample.com.ua @ua_spring #uadevclub
68
Just to mention Flash attributes and Redirect attributes
SpringByExample.com.ua @ua_spring #uadevclub
69
Spring in 2012
SpringByExample.com.ua @ua_spring #uadevclub
70
Just to mention Spring Roo
Spring Hadoop
Spring Android
SpringByExample.com.ua @ua_spring #uadevclub
71
Criticism Every tool should be used only if you could
not solve your task without it – KISS
When a lot of stuff come out-of-the-box it is not always good - YAGNI
When something is broken it is pain in the …
Open source but VMWare
SpringByExample.com.ua @ua_spring #uadevclub
72
Sources http://static.springsource.org/spring/docs/3.1.
x/spring-framework-reference/html/index.html
https://github.com/springbyexample/spring-by-example
https://github.com/mcgray/spring-vaadin
http://rstoyanchev.github.com/spring-32-test-webapps/
SpringByExample.com.ua @ua_spring #uadevclub
73
Questions?@ua_spring
[email protected] [email protected]
SpringByExample.com.ua