cust-9 spring config for alfresco developers

37
Spring Configuration for Alfresco Developers Hitesh Lad Principal Engineer Sony Pictures

Upload: alfresco-software

Post on 18-Dec-2014

1.429 views

Category:

Technology


1 download

DESCRIPTION

Alfresco is built using the best of breed open-source components, designed with extensibility in mind. Heavily utilizing the Spring Framework, Alfresco provides hooks to update basic configuration, customize behavior and presentation, add new functionality, and even replace entire subsystems. This talk will cover different Spring configuration options available and demonstrate specific use cases for Alfresco.

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?!