bejug - di with spring
DESCRIPTION
TRANSCRIPT
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
<bean> @Autowired and @Bean
Alef Arendsen
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Prologue
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.4
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.5
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Imagine
• A big pile of car parts• Workers running around uncontrollably• The parts don’t connect at all• Creating cars is all done by hand
• That’s what manufacturing was like before Henry Ford introduced the assembly line!
6
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.7
The Model T was the first automobile mass produced on assembly lines with completely interchangeable parts...
By 1914, the assembly process for the Model T had been so streamlined it took only 93 minutes to assemble a car.
Source: Wikipedia
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Comparison criteria
• Verbosity• Type safety• (Opportunity for) tool support• Solution for dealing with ambiguity
8
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Part I<bean>
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Spring Sucks!?
10
• Spring == XML • XML == Evil • Evil == Sucks
• Therefore, Spring == Sucks?
Shamelessly stolen from Craig Walls
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
CarPlant CarAssemblyLine
CarPartInventory Part
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Benefits of XML configuration
• Easy for tooling to generate graphs• Central location for all config data• Configuration separate from Java code
only option for code you don’t control• Easy solution for ambiguity
13
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Drawbacks of XML configuration
• Perceived XML hell (partially true)• Lack of type safety (at compile time)
–Tooling helps us a bit here• Less refactoring friendly• Names needed to solve ambiguity
14
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Part II@Autowired and <bean>
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
@Component
16
• Candidate for auto-detection
@Componentpublic class HibernateCarPartsInventory implements CarPartsInventory { private SessionFactory sessionFactory;...}
<context:component-scan base-package="com.carplant"/>
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
@Autowired
17
• Constructor• Field• Property
@Autowiredpublic HibernateCarPartsInventory(
SessionFactory factory) { this.sessionFactory = factory;}
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
CarPlant CarAssemblyLine
CarPartInventory Part
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Benefits of @Autowired-based approach
• ‘Config’ code in the Java code• More type safe experience• Elegant annotation-based solution for
solving ambiguity (requires XML)• Less verbose
19
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Drawbacks of @Autowired-based approach
• ‘Config’ code in the Java code• Extra (sometimes complex) measures
needed for solving ambiguity
20
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Part III@Bean and <bean>
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
@Configuration
22
• On type-level• Identifies a class as a configuration class• @Bean methods represent beans
@Configurationpublic class MyConfig {
public @Bean Service service() {return new Service();
}}
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
@ExternalBean
23
• Method-level• Identifies a method returning an external bean
public abstract @ExternalBean DataSource dataSource();
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
CarPlant CarAssemblyLine
CarPartInventory Part
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Benefits of @Bean-based approach
• ‘Config’ code completely separate from Java code
• Entirely type safe approach• Easy solution for ambiguity problem• Allows for context inheritance• Allows for 100% of all Java constructs
25
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Drawbacks of @Bean-based approach
• Harder to make it work in tooling• Requires a little bit more code
26
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Conclusion
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Conclusion
• There’s something for everyone in Spring• Type safe and separate configuration
– JavaConfig (@Bean)• Type safe and config in Java code
– @Autowired / @Component• For external code and XML fans
– <bean/>• For specification-minded people
– EJB 3• For Google fans
– Guice ;-)
28
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Conclusion
• All three approaches build on Spring’s proven and solid foundation–Just mix and match all approaches–A moving model, not a fixed static
snapshot of the current state of union• Plus all the other benefits
–Easy JMX exporting–Ease AOP configuration
29