bejug - di with spring

29
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited. <bean> @Autowired and @Bean Alef Arendsen

Upload: stephan-janssen

Post on 14-Jan-2015

1.590 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: BeJUG - Di With Spring

Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

<bean> @Autowired and @Bean

Alef Arendsen

Page 2: BeJUG - Di With Spring

Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Prologue

Page 3: BeJUG - Di With Spring

Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Page 4: BeJUG - Di With Spring

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.4

Page 5: BeJUG - Di With Spring

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.5

Page 6: BeJUG - Di With Spring

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

Page 7: BeJUG - Di With Spring

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

Page 8: BeJUG - Di With Spring

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

Page 9: BeJUG - Di With Spring

Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Part I<bean>

Page 10: BeJUG - Di With Spring

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

Page 11: BeJUG - Di With Spring

Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

CarPlant CarAssemblyLine

CarPartInventory Part

Page 12: BeJUG - Di With Spring

Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Page 13: BeJUG - Di With Spring

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

Page 14: BeJUG - Di With Spring

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

Page 15: BeJUG - Di With Spring

Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Part II@Autowired and <bean>

Page 16: BeJUG - Di With Spring

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"/>

Page 17: BeJUG - Di With Spring

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;}

Page 18: BeJUG - Di With Spring

Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

CarPlant CarAssemblyLine

CarPartInventory Part

Page 19: BeJUG - Di With Spring

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

Page 20: BeJUG - Di With Spring

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

Page 21: BeJUG - Di With Spring

Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Part III@Bean and <bean>

Page 22: BeJUG - Di With Spring

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();

}}

Page 23: BeJUG - Di With Spring

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();

Page 24: BeJUG - Di With Spring

Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

CarPlant CarAssemblyLine

CarPartInventory Part

Page 25: BeJUG - Di With Spring

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

Page 26: BeJUG - Di With Spring

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

Page 27: BeJUG - Di With Spring

Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Conclusion

Page 28: BeJUG - Di With Spring

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

Page 29: BeJUG - Di With Spring

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