The Spring Framework: A brief introduction to Inversion of Control - PowerPoint PPT Presentation

1 / 19
About This Presentation
Title:

The Spring Framework: A brief introduction to Inversion of Control

Description:

Something outside of the Object 'pushes' its dependencies into it. ... listener-class /listener A Spring app with no dependencies on Spring? ... – PowerPoint PPT presentation

Number of Views:465
Avg rating:3.0/5.0
Slides: 20
Provided by: pjug7
Category:

less

Transcript and Presenter's Notes

Title: The Spring Framework: A brief introduction to Inversion of Control


1
The Spring FrameworkA brief introduction
toInversion of Control
  • James Brundege

www.synaptocode.com
2
What is Spring?
  • 2 Things
  • ? An Inversion of Control (IoC) Container
  • ? Utilities that provide a consistent (and
    simple!) API to many other technologies (JDBC,
    ORM, AOP, Declarative Transactions, etc)

3
Guiding Principles of Spring
  • ? Minimize dependencies on Spring
  • ? Minimize dependencies between all layers of an
    application.
  • ? All application code should be testable,
    without an application server or other complex
    environment
  • ? Fully factor the APIs (the 90 case should be
    accomplished in one line of code!)

4
What is Inversion of Control (IoC)? (besides yet
another confusing term for a simple concept) IoC
is all about Object dependencies. Traditional
"Pull" approach ? Direct instantiation ?
Asking a Factory for an implementation ? Looking
up a service via JNDI "Push" approach ?
Something outside of the Object "pushes" its
dependencies into it. The Object has no
knowledge of how it gets its dependencies, it
just assumes they are there. The "Push"
approach is called "Dependency Injection".
5
(No Transcript)
6
Pull Example
  • public class BookDemoServicePullImpl implements
    BookDemoService
  • public void addPublisherToBook(Book book)
  • BookDemoFactory factory
    BookDemoFactory.getFactory()
  • BookDemoDao dao factory.getBookDemoDao()
  • String isbn book.getIsbn()
  • if (book.getPublisher() null isbn
    ! null)
  • Publisher publisher
    dao.findPublisherByIsbn(isbn)
  • book.setPublisher(publisher)

7
Push Example(Dependency Injection)
  • public class BookDemoServiceImpl implements
    BookDemoService
  • private BookDemoDao dao
  • public void addPublisherToBook(Book book)
  • String isbn book.getIsbn()
  • if (book.getPublisher() null isbn
    ! null)
  • Publisher publisher
    dao.findPublisherByIsbn(isbn)
  • book.setPublisher(publisher)
  • public void setBookDemoDao(BookDemoDao dao)
  • this.dao dao

8
BookDemoService Unit Test
9
Definitions Dependency Injection is the act of
injecting dependencies into an Object. Inversion
of Control is the general style of using
Dependency Injection to wire together application
layers. Hence Spring is an Inversion of Control
container. That is, it is a container that
handles Dependency Injection for you.
10
Why is Dependency Injection better? 2
reasons ? Loose Coupling ? Testability Loose
Coupling is improved because you don't hard-code
dependencies between layers and modules. Instead
you configure them outside of the code. This
makes it easy to swap in a new implementation of
a service, or break off a module and reuse it
elsewhere. Testability is improved because your
Objects don't know or care what environment
they're in as long as someone injects their
dependencies. Hence you can deploy Objects into a
test environment and inject Mock Objects for
their dependencies with ease.
11
How Spring does Inversion of Control
  • ? Write a configuration file in which you name
    concrete "beans" for the interfaces between your
    layers.
  • ? "Wire" the application together by stating
    which beans are dependent on each other.
  • ? Instantiate a Spring object called an
    ApplicationContext. This is a type of bean
    factory that will instantiate all your other
    beans and handle dependency injection.

12
Example Spring applicationContext.xml
  • ltbeansgt
  • ltbean id"bookDemoDao"
  • class"com.bookdemo.dao.hibernate.BookDemoDaoHi
    bernateImpl"gt
  • ltproperty name"sessionFactory"gt
  • ltref local"sessionFactory"/gt
  • lt/propertygt
  • lt/beangt
  • ltbean id"bookDemoService"
  • class"com.bookdemo.service.impl.BookDemoServic
    eImpl"gt
  • ltproperty name"bookDemoDao"gt
  • ltref bean"bookDemoDao"/gt
  • lt/propertygt
  • lt/beangt

13
Bootstapping the IoC container
  • To start an app using IoC
  • ? Create an ApplicationContext object and tell
    it where applicationContext.xml is.
  • ApplicationContext appContext
  • new ClassPathXmlApplicationContext("classpatha
    pplicationContext.xml")
  • This just has to be done once on startup, and can
    be done in the main() method or whatever code
    bootstraps the application.

14
Bootstapping the IoC container
  • The appContext holds a single copy of each bean
    declared in applicationContext.xml, so you could
    ask the Context for any bean by name
  • MyService service (MyService)appContext.getBean(
    "myService")
  • But don't! That is a "Pull" technique that treats
    the ApplicationContext like a Factory.
  • Instead, make sure that applicationContext.xml
    connects every bean to every other bean that
    needs it. None of the beans thus have a
    dependency on spring.jar

15
Bootstapping the IoC container
  • For web applications the situation is simpler
  • Web applications are bootstrapped by the web
    container based on the web.xml file. Hence
    creating an ApplicationContext on startup is as
    simple as a single declaration in web.xml
  • ltlistenergt
  • ltlistener-classgt
  • org.springframework.web.context.Contex
    tLoaderListener
  • lt/listener-classgt
  • lt/listenergt

16
A Spring app with no dependencies on Spring?
  • When bootstrapping spring from web.xml, there are
    only two pieces
  • ? The applicationContext.xml file
  • ? A single tag within web.xml
  • Not a single line of Java code!
  • Therefore, not one of your custom classes has a
    dependency on spring.jar

17
The BookDemo App
18
What else has Spring got?
  • Spring provides either implementations or
    fully-factored API wrappers over these
    technologies
  • ? JDBC and DAOs
  • ? ORM Hibernate, iBatis, TopLink and others
  • ? Declarative Transaction Support (without a
    full J2EE app server)
  • ? Aspect-Oriented Programming
  • ? Remote calls and Web Services (Axis)
  • ? EJBs

19
Resources
Spring Website http//www.springframework.org/
Download Spring with sample applications http//p
rdownloads.sourceforge.net/springframework/spring-
framework-1.2.8-with-dependencies.zip?download Ro
d Johnson's book on Spring http//www.powells.com
/biblio?PID719cgiproductisbn0764574833 Wikip
edia http//en.wikipedia.org/wiki/Spring_Framewor
k_28Java29 EasyMock http//www.easymock.org/
Echo2 (Rich Web Inteface framework) http//www.nex
tapp.com/platform/echo2/echo/
Write a Comment
User Comments (0)
About PowerShow.com