JavaOne: TS-7695: Spring Application Framework

|
Agile J2EE: where do we want to go?
  • Need to produce high quality apps, faster and at lower cost
  • cope with changing requirements (waterfall not an option)
  • need to simplify programming model (reduce complexity rather than hide with tools)
  • J2EE powerful, but complicated
Agile J2EE: Why important?
  • Survival: challenges from .NET, and PHP/Ruby at low end
  • Concerns that J2EE dev is slow and expensive
Why aren't we there yet?
  • Difficult to test traditional J2EE app
  • EJB's really tie code to runtime framework, hard to test w/o
  • Simply too much code, much is glue code (I concur, based on my experience with a J2EE portal in EDS)
  • Heavyweight runtime environment -- in order to test, need to deploy
Enter Lightweight Containers:
  • frameworks central to modern J2EE development
  • frameworks capture generic functionality, for solving common problems
  • J2EE out of box doesn't provide a complete programming model
  • Result is many in-house frameworks (expensive to maintain and develop, hard to share code)
Open Source Frameworks
  • Responsible for much of the innovation in the last 2-3 years
  • Several projects aim to simply development experience and remove excessive complexity from the developer's view
  • Easy to tell which ones are popular; driven by collective developer experience (refined, powerful, best-of-breed)
  • Tapping into "collective experience" of developers
How do Lightweight Containers work?
  • Inversion of Control/Dependency Injection (sophisticated configuration of POJOs)
  • Aspect Oriented Programming (AOP)
    • provide declarative services to POJOs
    • can get POJOs working with special features, JMX, etc.
What is Inversion of Control?
  • hollywood principle - don't call me, I'll call you
  • framework calls your code, not the reverse
What is Dependency Injection?
  • specialization of Inversion of Control
  • container injects dependencies into object instances using java methods
  • a.k.a. push configuration -- object gets configuration, doesn't know where it came from
  • decouples object from configuration from environment. Values get pushed in at runtime, so it is easy to run object in test or prod.
Why is Dependency Injection different?
  • configuration requires no container API
  • can use existing code that has no knowledge of container
  • your code can evolve independently of container code
  • easy to unit test (no JNDI stub, or properties files to monkey around with)
  • code is self-documenting
Advanced Dependency Injection:
  • shared instance, pooling
  • lifecycle tied to container objects
  • maps, sets, other complex types
  • type conversion with property editors
  • instantiation via factory methods
  • FactoryBean adds level of indirection; configured by framework, and returns objects based upon that configuration.
What is AOP?
  • paradigm for modularizing cross-cutting code (code that would otherwise be scattered across multiple places)
  • think about interception
  • callers invoke proxy, chain of interceptors decorate that call with additional functionality, callee finally invoked, and return passes back through chain
  • idea for transaction management and security
  • enabling technology, for defining own services, and applying them to POJOs.
Incremental AOP
  • think of it as a generic way similar to how EJB implemented
  • can be implemented with dynamic proxies
DI + AOP delivers POJO ideal
  • configure objects w/o invasive API
Spring Framework
  • OSS project, apache 2 license
  • Aims:
    • simplify J2EE development
    • provide a comprehensive solution to developing applications built on POJOs.
    • aims to address all sorts of applications, large banking, or small in-house
  • easy to work with JDBC, Hibernated, transaction management, etc.
  • consistency makes Spring more than sum of its parts.
  • don't need to deploy, can all run from within IDE if desired.

About this Entry

This page contains a single entry by Andy Reitz published on June 28, 2005 1:01 PM.

JavaOne: TS-5958: Amazon Web Services was the previous entry in this blog.

JavaOne: TS-7949: The New EJB 3.0 Persistence API is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Powered by Movable Type 4.01