Spring Framework - Basics - Web Application …tothzs/edu/webdev/...Spring Framework - Basics Web...

31
Spring Framework - Basics Web Application Development Zsolt Tóth University of Miskolc 2017 Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 1 / 31

Transcript of Spring Framework - Basics - Web Application …tothzs/edu/webdev/...Spring Framework - Basics Web...

Spring Framework - BasicsWeb Application Development

Zsolt Tóth

University of Miskolc

2017

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 1 / 31

Instantiation

Table of Contents

1 Instantiation

2 Dependency Injection

3 Spring Core

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 2 / 31

Instantiation

Static Type vs. Dynamic Type

Collection<User> users = new ArrayList<User>();

Static TypeType DeclarationDefines

MethodsIntentionLimits Behavior

Could beClassAbstract ClassInterface

Dynamic TypeInstantiationActual TypeDetermine Behaviorinstanceof Static Type

implementsextends

Can be Instantiated.

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 3 / 31

Instantiation

Inheritance and Implementation

InheritanceSpecificationClass Extension

FieldsMethods

@Override

Only One Parentabstract

final

ImplementationInterfaceBehavior Only

Return TypeNameParametersExceptions

? JavaDoc

Public Methods and ServicesAbstract Methods

Java 8 default

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 4 / 31

Instantiation

Abstraction

Liskov Substitution PrincipleGeneral ↔ AbstractExpected BehaviorVarious ImplementationStatic Type should be

as abstract as possible.as specific as necessary.

Collection<User> users =new ArrayList<User>();

List<User> users = newArrayList<User>();

ArrayList<User> users =new ArrayList<User>();

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 5 / 31

Instantiation

new Operator

Creates an ObjectMemory AllocationInvoke ConstructorInitialize Object

CostlyIssues

Hard Code Dynamic TypeWhen use?Where use?Testing

class Rectanble{private Point p1,p2;

Rectangle(Point p1,Point p2){

this.p1 = p1;this.p2 = p2;

}}

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 6 / 31

Instantiation

new Operator

Rectangle r = new Rectangle(0,0,1,1);/* whereRectangle(double p1x,double p1y,..){this.p1 = new Point(p1x,p1y); ...}

*///orPoint p1 = new Point(0,0);Point p2 = new Poit(1,1);Rectangle r = new Rectangle(p1,p2);//orRectangle r = new Rectangle(

new Point(0,0),new Point(1,1);

);

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 7 / 31

Instantiation

Instantiation vs. Usage

InstantiationCostly

Resource AllocationMemory Allocation

Takes TimeEstablish NetworkConnection

Could be DifficultTons of ParametersJDBC

Defines Dynamic Type

UsageUse Object via MethodsDepends on ExpectedBehavior

Static TypeInterface Required

Should not Create Object.Dynamic Type could beChangedReusability

Object creation and usage should be separated!

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 8 / 31

Instantiation

Consequences

ProInstantiation could be Centralized.Testing Become Easier.

See "Software Projects & Testing" subject.

Increase Reusability.More General Code

QuestionHow will we get the dependencies?

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 9 / 31

Dependency Injection

Table of Contents

1 Instantiation

2 Dependency Injection

3 Spring Core

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 10 / 31

Dependency Injection

Participants

service an object that will be usedclient object that uses the service

interface defines how the client uses the service

injector creates the service and gives it into the client.

GoalSeparation of the creation of the client’s dependencies from theclient’s behavior.

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 11 / 31

Dependency Injection

Types of Dependency Injection

Field InjectionDependency Injection Frameworks knowShould not be used.Reflection

Constructor InjectionDependencies are Passed as Constructor ArgumentsCannot Create object when a Dependency is MissingMandatory Dependencies

Setter InjectionSetter Methods are Invoked After Constructor UsedOptional Dependencies

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 12 / 31

Dependency Injection

Constructor Injection

Mandatory DependenciesPart of Client InitializationBlock the Client’sFunctionalityExamples

Database Access

class Client{private

MandatoryService ms;private OptionalService

os;public

Client(MandatoryServicems){

this.ms = ms;}}

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 13 / 31

Dependency Injection

Setter Injection

Optional DependenciesNot Required for the ClientExtends, Enhance itsFunctionsExamples

LoggingPublishing Event

class Client{private

MandatoryService ms;private OptionalService

os;public

setOptionalService(OptionalService os ){

this.os = os;}}

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 14 / 31

Dependency Injection

Typical Service Categories

StorageDatabase Access Objects

Business LogicOther FunctionsMicro Services

3rd Party ServicesSystem Integration"Distributed Systems" subject in MSc.Social MediaCurrency Changewww.programmableweb.com

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 15 / 31

Dependency Injection

Consequences

+ Flexibility and Configurability+ Refactoring+ Increase Abstractness+ Cleaner Code+ Independent Development+ Facilitates Testing and Mocking- Configuration Required- Difficult to Understand- Dependency Injection Framework is Required

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 16 / 31

Spring Core

Table of Contents

1 Instantiation

2 Dependency Injection

3 Spring Core

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 17 / 31

Spring Core

Spring Framework

JavaCurrent Version 4.3Open SourceInversion of ControlFramework

Core, AOP, DataWeb, WebMVCIntegration, Cloud

<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.9.RELEASE</version></dependency>

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 18 / 31

Spring Core

Spring Projects

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 19 / 31

Spring Core

Core Elements

CoreBasic TasksResource Finding

BeansBean DefinitionXML Mappingspring-beans-x.x.xsd

ContextApplicationContext

SpELSpring Expression LanguageText EvaluationXML based Bean Definition

#{string expr.}

#{systemProperties[’user’]}#{T(java.lang.Math).random()}

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 20 / 31

Spring Core

ApplicationContext

interface

Bean factory methodsLoad file resourcesPublish eventsResolve messagesSupport internationalization.Context inheritance

Super InterfacesBeanFactoryResourceLoader

ImplementationsAnnotation Config ApplicationContextClassPath Xml ApplicationContextXml Web Application Context

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 21 / 31

Spring Core

BeanFactoryinterface

Bean ContainerRegistry of ApplicationComponentsImplementations (27)

XMLAnnotation

BeanObjectString IDDependencyTypes

PrototypeSingleton

containsBean(String)

getBean(String)

getBean(Class<T>)

isPrototype(String)

isSingleton(String)

isTypeMatch(String,Class<T>)

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 22 / 31

Spring Core

Bean Life-cycle

1 BeanNameAware’ssetBeanName

2 BeanClassLoaderAware’ssetBeanClassLoader

3 BeanFactoryAware’ssetBeanFactory

4 EnvironmentAware’ssetEnvironment

5

EmbeddedValueResolverAware’ssetEmbeddedValueResolver

6 ResourceLoaderAware’ssetResourceLoader (onlyapplicable when running in anapplication context)

7

ApplicationEventPublisherAware’ssetApplicationEventPublisher(only applicable when runningin an application context)

8 MessageSourceAware’ssetMessageSource (onlyapplicable when running in anapplication context)

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 23 / 31

Spring Core

Bean Life-cycle

9 ApplicationContextAware’ssetApplicationContext (onlyapplicable when running in anapplication context)

10 ServletContextAware’ssetServletContext (onlyapplicable when running in aweb application context)

11

postProcessBeforeInitializationmethods ofBeanPostProcessors

12 InitializingBean’safterPropertiesSet

13 a custom init-methoddefinition

14 postProcessAfterInitializationmethods ofBeanPostProcessors

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 24 / 31

Spring Core

Application Context - XML

AbstractXmlApplicationContextClassPathXmlApplicationContextFileSystemXmlApplicationContext

XMLText basedHuman Readable

Security

Reconfigurable

Location$basedir/src/main/resources

WEB-INF/

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 25 / 31

Spring Core

Application Context - XML

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="...xmlns:xsi="...xmlns:p="...xmlns:context="...xmlns:aop="...xmlns:mvc="...xsi:schemaLocation="...><import resource="si-config-measurement.xml"/>...

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 26 / 31

Spring Core

Application Context - XML

<bean id="wifiDistanceCalculator"class="<packages>.VectorIntersectionWiFiRSSIDistance"></bean>

<bean id="measurementDistanceCalculator"class="<packages>.MeasurementDistanceCalculatorImpl"><constructor-arg ref="wifiDistanceCalculator"/><constructor-arg name="wifiDistanceWeight"

value="1.0"/><constructor-arg name="magnetometerDistanceWeight"

value="0.5"/><constructor-arg name="gpsDistanceWeight"

value="0.0"/></bean>

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 27 / 31

Spring Core

Application Context - XML

<bean id="positioningService"class="<packages>.KNNSimplePositioning">

<constructor-arg name="distanceCalculator"ref="measurementDistanceCalculator"/>

<constructor-arg name="measurementGateway"ref="MeasurementGateway"/>

<constructor-arg name="k" value="3"/></bean></beans>

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 28 / 31

Spring Core

Application Context - Annotation

AnnotationMetadataNo Direct EffectUsage

Information for the compilerCompile-time anddeployment-timeprocessingRuntime processing

Sprint AnnotationsJava BasedXML is not required.Not ReadableConfiguration ???Annotations

@Component@Configuration@Bean

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 29 / 31

Spring Core

Application Context - Annotation

@Component

Meta AnnotationCandidates for Auto-detectionLogical Component Name

@Configuration

@Component

Contains @Bean methodsDescribe Application Context

@Bean

MethodReturns with a BeanBean Name

Method NameSpecified namesAlias

Optional Parametersautowire : AutowireinitMethod : StringdestroyMethod: Str.name : String[]value : String[]

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 30 / 31

Spring Core

Application Context - Annotation

@Configurationpublic class ExampleConfiguration {

@Bean(name = "greetingsService")public GreetingsService initGreetingsService(){return new GreetingsHU();}}

Zsolt Tóth (University of Miskolc) Spring Framework - Basics 2017 31 / 31