spring framework - basics - web application...
TRANSCRIPT
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