Spring Talk

Preview:

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

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

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

Input12.15364048

Output

Use case

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

Input12.15364048

Output

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

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

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

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

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

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

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

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

10000 input files 10000 output files

Use case

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

What’s wrong with this code?

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

<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!

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

Lets see this in Code

Spring Core

More Theory of Spring Core

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

Constructor Injection

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

Setter Injection

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

Auto Wiring

Requirement - All my beans require a logger.

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

A – No, Use Auto Wiring

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

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>

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

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>

Lazy Init

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

Initiating Spring Framework

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

Introduction to Spring Roo

Scope of this talk

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

Rapid Application Development

Configuration Burden

Commands for Convention

No Lock In

Extensible

Generated Code Adapts to new inputs

Code Demo Time

Typical Application Flow

Define Entities

CRUD DAOs

Web Controller

DAO Unit Test cases

Controller Test Cases

Security

Application Logic

Deploy

Integration Tests

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

http://localhost:8080/roo

Q & A?

Contact us atrohitsghatol@gmail.com