Spring Talk
description
Transcript of Spring Talk
![Page 1: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/1.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/2.jpg)
Speaker Introduction
![Page 3: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/3.jpg)
Speaker Introduction
![Page 4: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/4.jpg)
Inversion of Control and Dependency Injection
![Page 5: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/5.jpg)
Example Scenario
![Page 6: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/6.jpg)
Use case
ExpressionEvaluator(3*4)+sin(cos(30))
Input12.15364048
Output
![Page 7: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/7.jpg)
Use case
ExpressionEvaluator(3*4)+sin(cos(30))
Input12.15364048
Output
………………………….………………………….
………………………….………………………….
………………………….………………………….
………………………….………………………….
………………………….………………………….
………………………….………………………….
………………………….………………………….
………………………….………………………….
10000 input files 10000 output files
![Page 8: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/8.jpg)
Use case
Problem Statement -Create a Test framework to test Expression Evaluator with 10,000 expressions
![Page 9: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/9.jpg)
![Page 10: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/10.jpg)
What’s wrong with this code?
![Page 11: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/11.jpg)
<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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/12.jpg)
<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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/13.jpg)
<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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/14.jpg)
Lets see this in Code
![Page 15: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/15.jpg)
Spring Core
![Page 16: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/16.jpg)
More Theory of Spring Core
• Constructor Dependency Injection• Setter Dependency Injection• Auto Wiring• Bean Scope• Lazy Init• Initiating Spring Framework
![Page 17: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/17.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/18.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/19.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/20.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/21.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/22.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/23.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/24.jpg)
Lazy Init
![Page 25: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/25.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/26.jpg)
Initiating Spring Framework
![Page 27: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/27.jpg)
![Page 28: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/28.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/29.jpg)
Introduction to Spring Roo
![Page 30: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/30.jpg)
Scope of this talk
• Understanding Rapid App Development• Demo Spring Roo• Excite you guys to take a session on Roo
![Page 31: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/31.jpg)
Rapid Application Development
Configuration Burden
Commands for Convention
No Lock In
Extensible
Generated Code Adapts to new inputs
![Page 32: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/32.jpg)
Code Demo Time
![Page 33: Spring Talk](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/33.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/34.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081517/56816935550346895de08efd/html5/thumbnails/35.jpg)
http://localhost:8080/roo