36
Spring Talk • Dependency Injection and IoC – Rohit • Spring Core Introduction – Rohit • Spring Database Connectivity– Lalit Bhatt • Introduction to Spring Roo – Rohit

Spring Talk

  • Upload
    omar

  • View
    30

  • Download
    1

Embed Size (px)

DESCRIPTION

Spring Talk. Dependency Injection and IoC – Rohit Spring Core Introduction – Rohit Spring Database Connectivity– Lalit Bhatt Introduction to Spring Roo – Rohit. Speaker Introduction. Speaker Introduction. Inversion of Control and Dependency Injection. Example Scenario. Use case. - PowerPoint PPT Presentation

Citation preview

Page 1: Spring Talk

Spring Talk

• Dependency Injection and IoC – Rohit• Spring Core Introduction – Rohit• Spring Database Connectivity– Lalit Bhatt• Introduction to Spring Roo – Rohit

Page 2: Spring Talk

Speaker Introduction

Page 3: Spring Talk

Speaker Introduction

Page 4: Spring Talk

Inversion of Control and Dependency Injection

Page 5: Spring Talk

Example Scenario

Page 6: Spring Talk

Use case

ExpressionEvaluator(3*4)+sin(cos(30))

Input12.15364048

Output

Page 7: Spring Talk

Use case

ExpressionEvaluator(3*4)+sin(cos(30))

Input12.15364048

Output

………………………….………………………….

………………………….………………………….

………………………….………………………….

………………………….………………………….

………………………….………………………….

………………………….………………………….

………………………….………………………….

………………………….………………………….

10000 input files 10000 output files

Page 8: Spring Talk

Use case

Problem Statement -Create a Test framework to test Expression Evaluator with 10,000 expressions

Page 9: Spring Talk
Page 10: Spring Talk

What’s wrong with this code?

Page 11: Spring Talk

<R> execute(<D>)

ITestCase

execute()

ITestExecutioner

<D> getInput(index);Int getCount();

IInputAdapter

<R> getExpected(index);Int getCount();

IExpectedDataAdapter

Init();collect();publish()

IPublisher<R>

log();

ILogger<L>

Page 12: Spring Talk

<R> execute(<D>)

ITestCase

execute()

ITestExecutioner

<D> getInput(index);Int getCount();

IInputAdapter

<R> getExpected(index);Int getCount();

IExpectedDataAdapter

Init();collect();publish()

IPublisher<R>

log();

ILogger<L>

If we say new for each arrow, we are

coupling components!

Page 13: Spring Talk

<R> execute(<D>)

ITestCase

void setLogger(..)void setTestCase(..)void setInputAdapter(..)void setOutputAdapter(..)void setResultPublisher(…)void execute()

TestExecutioner

<D> getInput(index);Int getCount();

IInputAdapter

<R> getExpected(index);Int getCount();

IExpectedDataAdapter

Init();collect();publish()

IPublisher<R>

log();

ILogger<L>

Page 14: Spring Talk

Lets see this in Code

Page 15: Spring Talk

Spring Core

Page 16: Spring Talk

More Theory of Spring Core

• Constructor Dependency Injection• Setter Dependency Injection• Auto Wiring• Bean Scope• Lazy Init• Initiating Spring Framework

Page 17: Spring Talk

Constructor Injection

<!-- IInputAdapter, IExpectedDataAdapter Implementation --><bean id="testDataAdapter" class="com.design.di.production.TestDataAdapter"> <constructor-arg type="java.lang.String" value="testdata.csv"/></bean>

Page 18: Spring Talk

Setter Injection

<!-- Executioner Implementation --><bean id="executioner" class="com.design.di.production.ActualExecutioner"> <property name="resultPublisher"> <ref bean="csvPublisher"/> </property> ….</bean>

Page 19: Spring Talk

Auto Wiring

Requirement - All my beans require a logger.

Q – Do I explicitly put logger ref in all beans?

A – No, Use Auto Wiring

Page 20: Spring Talk

Autowire TypesType Meaning

No No Auto wiring

ByName Bean name attribute name matched

ByType Maps property to Single object of type matched, if multiple objects found fatal error

Constructor Same as ByType but for constructor arguments

Autodetect Either ByType or Constructor through introspection of bean class

Page 21: Spring Talk

Auto Wiring

<bean id="csvPublisher" class="com.design.di.production.CSVPublisher" autowire=“autodetect”> <property name="filePrefix" value="result"> </property> <property name="logger"> <ref bean="consoleLogger"/> </property> </bean>

Page 22: Spring Talk

Bean ScopeType Meaning

Singleton As name suggests Singleton instance, good for stateless bean

Prototype A new bean for each ref or getBean(), good for stateful beans

request Application for Spring Web apps, Request Scope

session Application for Spring Web apps, Session Scope

globalesession Application for Spring Web apps, Session Scope, Valid for Port let Applications

Page 23: Spring Talk

Bean Scope

<!-- Logger Implementation --><bean id="consoleLogger" class="com.design.di.production.ConsoleLogger” scope=“prototype”> <property name="level"> <value type="com.design.di.ILogger$Level"> Info </value> </property> </bean>

Page 24: Spring Talk

Lazy Init

Page 25: Spring Talk

Lazy Init

<!- - Created at first access - -><bean id="lazy" class="com.foo.ExpensiveToCreateBean” lazy-init="true"/>

<!- - Created an at startup - -><bean name="not.lazy" class="com.foo.AnotherBean"/>

Page 26: Spring Talk

Initiating Spring Framework

Page 27: Spring Talk
Page 28: Spring Talk

Conclusion

Why use Spring1. Modular Application Development –

Maximum reuse2. Configuration based Application

Development3. TDD possible using mock objects4. Integration testing by stubbing out

production modules

Page 29: Spring Talk

Introduction to Spring Roo

Page 30: Spring Talk

Scope of this talk

• Understanding Rapid App Development• Demo Spring Roo• Excite you guys to take a session on Roo

Page 31: Spring Talk

Rapid Application Development

Configuration Burden

Commands for Convention

No Lock In

Extensible

Generated Code Adapts to new inputs

Page 32: Spring Talk

Code Demo Time

Page 33: Spring Talk

Typical Application Flow

Define Entities

CRUD DAOs

Web Controller

DAO Unit Test cases

Controller Test Cases

Security

Application Logic

Deploy

Integration Tests

Page 34: Spring Talk

Roo Commands$>roo.sh$roo> project --topLevelPackage com.test.roo$roo> persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY$roo> entity --class ~.model.Employee –testAutomatically$roo> field string --fieldName firstName --notNull$roo> field string --fieldName lastName –notNull$roo> controller all --package ~.web$roo> json all$roo> exit$>mvn package tomcat:run

Page 35: Spring Talk

http://localhost:8080/roo