Spring By Example One Day Workshop

80
Spring By Example Oleksiy Rezchykov Eugene Scripnik

Transcript of Spring By Example One Day Workshop

Spring By ExampleOleksiy RezchykovEugene Scripnik

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

6

Spring in 2012

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

9

IoC Pros vs Cons (to discuss)

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

11

CI vs SI Pro vs Cons (to discuss)

SpringByExample.com.ua @ua_spring

12

Context An object which contains beans declarations

with their dependencies

BeanFactory interface implementation

SpringByExample.com.ua @ua_spring

13

XML namespaces

SpringByExample.com.ua @ua_spring

14

Context

SpringByExample.com.ua @ua_spring

15

Context usage

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

17

Bean instantiation order

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

19

Property Editors

SpringByExample.com.ua @ua_spring

20

Multiple config files

SpringByExample.com.ua @ua_spring

21

Bean definition inheritance

SpringByExample.com.ua @ua_spring

22

Inner Beans

SpringByExample.com.ua @ua_spring

23

Factory Method

SpringByExample.com.ua @ua_spring

24

Map, List, Set, Prop, Null

SpringByExample.com.ua @ua_spring

25

Map, List, Set, Prop, Null

SpringByExample.com.ua @ua_spring

26

Util namespace

SpringByExample.com.ua @ua_spring

27

Component model

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

29

@Autowired

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

33

Resource loading and i18n

SpringByExample.com.ua @ua_spring

34

Resource loading and i18n

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

36

SpEl

SpringByExample.com.ua @ua_spring

37

Java Spring Config @Configuration

@Bean

Support for Environment and Profiles

SpringByExample.com.ua @ua_spring

38

Java Spring Config

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

40

Environment abstraction & context

profiles

SpringByExample.com.ua @ua_spring

41

Environment abstraction & context

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

43

AOP Aspect

Advice

Join point

Pointcut

SpringByExample.com.ua @ua_spring

44

AOP

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

51

JDBCTemplate

SpringByExample.com.ua @ua_spring

52

JDBC namespace

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

54

ORM main challenges Object inheritance

Object relations

SpringByExample.com.ua @ua_spring

55

Hibernate main parts SessionFactory

Session

Entity

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

72

Persistence layer testing

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

74

Application & Dispatcher servlet

context

SpringByExample.com.ua @ua_spring

75

Front controller and MVC

SpringByExample.com.ua @ua_spring

76

URL mappings @RequestMapping

SpringByExample.com.ua @ua_spring

77

View resolvers AbstractCachingViewResolver

XmlViewResolver

ResourceBundleViewResolver

UrlBasedViewResolver

InternalResourceViewResolver

VelocityViewResolver / FreeMarkerViewResolver

ContentNegotiatingViewResolver

SpringByExample.com.ua @ua_spring

78

View resolvers

SpringByExample.com.ua @ua_spring

79

CRUD in one place

SpringByExample.com.ua @ua_spring

80

Using Spring for UI tests

Integration testing of Controllers

Spring as a framework for Selenium UI tests