Transcript
Page 1: CUST-9 Spring Config for Alfresco Developers

Spring Configuration for Alfresco Developers!

Hitesh Lad Principal Engineer Sony Pictures!

Page 2: CUST-9 Spring Config for Alfresco Developers

Agenda!

Spring Overview

Dependency Injection

Bean Definitions

Alfresco Spring Bootstrap

Some Examples

Page 3: CUST-9 Spring Config for Alfresco Developers

What is Spring?!

•  The most popular application development framework for enterprise Java

•  Based on code published in “Expert One-on-One J2EE Design and Development” by Rod Johnson (Wrox, 2002).

•  Made up of many modules

•  Fosters integration with good existing solutions

Page 4: CUST-9 Spring Config for Alfresco Developers

What is a Spring Bean?!

•  Plain Old Java Objects!•  No special interfaces or base classes needed!•  Usually have getter and setter methods for accessing properties!•  Can be interrogated or manipulated via the Java Reflection API!

•  Focused on implementing your business logic!•  Across all tiers of your application!•  Usually highly cohesive!

•  Not an old pre-3.0 EJB!!

•  Usually agnostic to the Spring container!

Page 5: CUST-9 Spring Config for Alfresco Developers

Agenda!

Spring Overview

Dependency Injection

Bean Definitions

Alfresco Spring Bootstrap

Some Examples

Page 6: CUST-9 Spring Config for Alfresco Developers

What is Dependency Injection?!

•  Springʼs Dependency Injection instantiates and combines beans to form your application!

•  Decouples the configuration and specification of dependencies from your actual program logic!

•  Removes the need for programmatic singletons!

•  Beans should implements and depend on interfaces!

Page 7: CUST-9 Spring Config for Alfresco Developers

Dependency Injection Example!

Page 8: CUST-9 Spring Config for Alfresco Developers

Dependency Injection Example, cont.!

Page 9: CUST-9 Spring Config for Alfresco Developers

Dependency Injection Example - XML!

Page 10: CUST-9 Spring Config for Alfresco Developers

BeanFactory and ApplicationContext!

•  org.springframework.beans.factory.BeanFactory •  Base interface for actual Spring DI container!•  Instantiates or sourcing application objects!•  Configures such objects!•  Assembles the dependencies between these objects!

•  org.springframework.context.ApplicationContext •  ApplicationContext is a complete superset of a BeanFactory!•  adds enhanced capabilities to it, more J2EE and enterprise-centric!

Page 11: CUST-9 Spring Config for Alfresco Developers

BeanFactories and ApplicationContexts!

Page 12: CUST-9 Spring Config for Alfresco Developers

Bean Definition!

Bean are represented as BeanDefinition objects!

•  Bean Identifier(s)!

•  Class name!

•  Bean Properties / Constructor-Args!

•  Behavioral Elements!

•  Definition Reuse!

Page 13: CUST-9 Spring Config for Alfresco Developers

Bean Definition - Identifiers!

•  All beans must have at least 1 identifier!•  Beans identifiers must be unique withind BeanFactory!•  Prefer using id attribute vs name attribute!•  Multiple identifiers are considered aliases!

Page 14: CUST-9 Spring Config for Alfresco Developers

Bean Definition - Class Names!

•  Class attribute is usually the class we want to construct!•  Class is almost always needed!•  Except for non-static factory beans and abstract beans!

•  Use fully qualified class names!•  FactoryBean interface build object of different types!

Page 15: CUST-9 Spring Config for Alfresco Developers

Bean Definition - Properties!

•  Writeable Bean Properties correspond to “setters”!•  Property name follows JavaBean convention!•  Values set can be primitives or objects!•  Static values, e.g. Strings, ints, …!•  Property lookups, from a Properties file or Environment variable!•  Other bean definitions references!

Page 16: CUST-9 Spring Config for Alfresco Developers

Bean Definition – Contructor Args!

•  Number/Type of arguments must match an existing constructor!

•  Useful for explicitly requiring dependencies!

•  Constructor argument names are usually “erased” during compilation !!•  Sometimes “index” or “type” needed to disambiguate!

Page 17: CUST-9 Spring Config for Alfresco Developers

Bean Definition – Contructor Args!

Page 18: CUST-9 Spring Config for Alfresco Developers

Bean Definition – Bean Scope!

•  Bean default scope is ʻsingletonʼ per BeanFactory!•  Other scopes – Prototype, Session & Request!

Page 19: CUST-9 Spring Config for Alfresco Developers

Bean Definition – Reuse!

Page 20: CUST-9 Spring Config for Alfresco Developers

Bean Definition - Reuse!

Page 21: CUST-9 Spring Config for Alfresco Developers

Bean Definition – Ordering!

Page 22: CUST-9 Spring Config for Alfresco Developers

Bean Definition - Recap!•  Bean Identifier(s)!

•  Class name!•  Usually the class weʼre constructing!

•  Bean Properties / Constructor-Args!•  Static values!•  Property lookups!•  Other bean definitions references!

•  Behavioral Elements!•  Scope!•  Initialization / Destruction!

•  Definition Reuse!

Page 23: CUST-9 Spring Config for Alfresco Developers

Agenda!

Spring Overview

Dependency Injection

Bean Definitions

Alfresco Spring Bootstrap

Some Examples

Page 24: CUST-9 Spring Config for Alfresco Developers

Spring in Alfresco!

Page 25: CUST-9 Spring Config for Alfresco Developers

alfresco.war - web.xml!

Page 26: CUST-9 Spring Config for Alfresco Developers

alfresco.war - web-application-context.xml!

Page 27: CUST-9 Spring Config for Alfresco Developers

alfresco.war - application-context.xml!

Page 28: CUST-9 Spring Config for Alfresco Developers

Agenda!

Spring Overview

Dependency Injection

Bean Definitions

Alfresco Spring Bootstrap

Some Examples

Page 29: CUST-9 Spring Config for Alfresco Developers

Adding a custom model!

Page 30: CUST-9 Spring Config for Alfresco Developers

custom-model-context.xml!

Page 31: CUST-9 Spring Config for Alfresco Developers

alfresco.war – core-services-context.xml!

Page 32: CUST-9 Spring Config for Alfresco Developers

Adding a custom Web Script !

Page 33: CUST-9 Spring Config for Alfresco Developers

HelloWorldWebScript.java!

Page 34: CUST-9 Spring Config for Alfresco Developers

web-scripts-application-context.xml!

Page 35: CUST-9 Spring Config for Alfresco Developers

Agenda!

Spring Overview

Dependency Injection

Bean Definitions

Alfresco Spring Bootstrap

Some Examples

Page 36: CUST-9 Spring Config for Alfresco Developers

References!

For More Information, check out the following:!

•  http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html!

•  http://wiki.alfresco.com/wiki/Java-backed_Web_Scripts_Samples!

•  http://wiki.alfresco.com/wiki/Data_Dictionary_Guide!

•  http://java1337.com/ (My Blog)!

Page 37: CUST-9 Spring Config for Alfresco Developers

Questions?!


Top Related