spring by example one day workshop
TRANSCRIPT
SpringByExample.com.ua @ua_spring
2
About us Software Engineers
Working with Spring since 2006
Pragmatic programmers
SpringByExample.com.ua founders
SpringByExample.com.ua @ua_spring
3
Contents Intro
IoC using Spring
Persistence with Spring
Web applications with Spring MVC
SpringByExample.com.ua @ua_spring
4
Intro What we will do today?
Meet some new faces
Learn some new stuff
Code some new stuff
SpringByExample.com.ua @ua_spring
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
SpringByExample.com.ua @ua_spring
7
IoC using Spring Buiding xml contexts
Bean scopes & lifecycles
Constructor vs Setter injection
Property placeholders
p & c and util name spaces
Annotation context
Using component scan
AOP usage
Spring AOP vs AspectJ
SpringByExample.com.ua @ua_spring
8
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
10
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
SpringByExample.com.ua @ua_spring
12
Context An object which contains beans declarations
with their dependencies
BeanFactory interface implementation
SpringByExample.com.ua @ua_spring
16
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
18
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
28
@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
30
@Inject Context and Dependency Injection (CDI)
standard JSR-299
SpringByExample.com.ua @ua_spring
31
@Resource JSR 250 (Common annotations)
Supports @PostConstruct and @PreDestroy as well
SpringByExample.com.ua @ua_spring
32
AutowiringAn appropriate bean for dependency is found through:
Type
Name
Type and Name combination
SpringByExample.com.ua @ua_spring
35
SpEl Stands for Spring Expression Language
Can be used in the xml context
Can be used in bean classes
SpringByExample.com.ua @ua_spring
37
Java Spring Config @Configuration
@Bean
Support for Environment and Profiles
SpringByExample.com.ua @ua_spring
39
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
42
AOPA programming paradigm which allows to separate cross-cutting concerns
Cross-cutting logic:
Logging
Tracing
Security
SpringByExample.com.ua @ua_spring
45
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
46
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
47
Persistence with Spring
Building DAO
Embedded Datasources
JDBC vs ORM DAO’s
Integration testing with Spring
@Transactional & transactions with Spring
SpringByExample.com.ua @ua_spring
48
Spring supports JDBC
JPA
JDO
Concrete ORM
NoSQL templates (Mongo/Redis)
Graph DB abstractions - Spring Data Graph project
SpringByExample.com.ua @ua_spring
49
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
50
JDBCTemplate Useful interface
No boilerplate code
Exception handling
SpringByExample.com.ua @ua_spring
53
Intro to HibernateObject Relational Mapping - is a programming technique for converting data between incompatible type systems in object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language.
SpringByExample.com.ua @ua_spring
56
Transactions in Spring
Support for ACID transactions
Declarative and programmatic
SpringByExample.com.ua @ua_spring
57
Transaction managers
Spring support both container managed and framework managed transactions
Managers:
DataSourceTransactionManager
HibernateTransactionManager
JPATransactionManager
JTATransactionManager
SpringByExample.com.ua @ua_spring
58
@Transactional Isolation levels
Transaction propagation
Read-only transactions
SpringByExample.com.ua @ua_spring
59
Read-only transactions
A read-only transaction can be used when your code reads but does not modify data. Read-only transactions can be a useful optimization in some cases, such as when you are using Hibernate.
SpringByExample.com.ua @ua_spring
60
Isolation levels DEFAULT - The default isolation level for the
underlying resource (usually this is the READ_COMMITTED isolation level)
SpringByExample.com.ua @ua_spring
61
Isolation levels READ_UNCOMMITTED - Least restrictive
isolation level. A transaction can read data updates even if they haven't yet been committed. (The updates might subsequently be rolled-back).
SpringByExample.com.ua @ua_spring
62
Isolation levels READ_COMMITTED - A transaction can only
read data that has already been committed. The transaction doesn't see uncommitted updates.
SpringByExample.com.ua @ua_spring
63
Isolation levels REPEATABLE_READ - A transaction always
reads the same value after it has read some data. Other transactions can update the data in parallel with the original transaction.
SpringByExample.com.ua @ua_spring
64
Isolation levels SERIALIZABLE - This is the most restrictive
isolation level. Transactions are completely isolated from each other. Resource managers frequently implement this isolation level by locking large amounts of data
SpringByExample.com.ua @ua_spring
65
Propagation NOT_SUPPORTED
Suspends client's transaction until bean method is complete
SpringByExample.com.ua @ua_spring
66
Propagation SUPPORTS
If client has transaction, bean method is included in it
If client doesn't have transaction, bean method doesn't create one
SpringByExample.com.ua @ua_spring
67
Propagation REQUIRED
If client has a transaction, bean method is included in it
If client doesn't have a transaction, bean method creates one
SpringByExample.com.ua @ua_spring
68
Propagation REQUIRES_NEW
If client has a transaction, bean method creates new one anyway
If client doesn't have a transaction, bean method creates one
SpringByExample.com.ua @ua_spring
69
Propagation MANDATORY
If client has a transaction, bean method uses it
If client doesn't have a transaction, exception!
SpringByExample.com.ua @ua_spring
70
Propagation NEVER
If client has a transaction, exception!
If client doesn't have transaction, bean method doesn't create one
SpringByExample.com.ua @ua_spring
71
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
73
Spring MVC Application context
Dispatcher Servlet and it’s context
Controllers and mappings
Implementing CRUD logic
Using Spring for UI tests
SpringByExample.com.ua @ua_spring
77
View resolvers AbstractCachingViewResolver
XmlViewResolver
ResourceBundleViewResolver
UrlBasedViewResolver
InternalResourceViewResolver
VelocityViewResolver / FreeMarkerViewResolver
ContentNegotiatingViewResolver