0% found this document useful (0 votes)
38 views12 pages

3.SpringBoot Notes

Uploaded by

venkatesh99.info
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
38 views12 pages

3.SpringBoot Notes

Uploaded by

venkatesh99.info
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

=======================================

Day-01 : Spring Boot & Microservices


=======================================

1) What is Spring Boot ?

2) Why Spring Boot ?

3) Advantages with Spring Boot

4) What type of apps we can build using boot ?

=======================
What is Spring Boot ?
======================

=> Spring Boot is an approach to develop spring framework based applications with
less configurations.

=> Spring Boot is an extension for existing spring framework.

=> Spring Boot internally uses spring framework only.

=> Spring Boot supports rapid application development.

Spring Boot = (Spring + Auto Config) - xml config

=======================================================
What type of applications we can create using boot ?
=======================================================

=> By using this spring boot we can develop several types of applications

a) stand-alone app
b) web application ( C2B )
c) distributed application (B2B)

(webservices / rest apis)

========================
Spring Boot Advantages
========================

1) POM starters

2) Dependency Version Conflicts solution

3) Embedded Servers

4) Auto Configuration

5) Actuators....

===========================
What is POM starter ?
===========================
=> pom starters are used to simplify maven or gradle configurations

=> We have several pom starters

a) spring-boot-starter-web

b) spring-boot-starter-data-jpa

c) spring-boot-starter-mail

d) spring-boot-starter-security

Note: when we add pom starter boot will take care of depenency version.

==================
Embedded Servers
==================

=> Spring Boot will provide servers to run our application

a) tomcat (default)
b) jetty
c) netty

===================
Auto Configuration
===================

=> It is one of the most imp feature in spring boot

=> Boot will identify configurations required for the application based on pom
starters and it will provide that configuration in runtme.

===============
Actuators
==============

=> To monitor and manage our application

=> Production Ready Features

/health
/beans
/mappings
/configProps
/heapdump
/threaddemp

=======================================
Day-02 : Developing Spring Boot Apps
=======================================

=> We can develop in 2 ways

a) Spring Initializr website ([Link])

-> Create Project


-> Download as zip file
-> Extract zip file
-> Import into IDE as Maven project

b) IDE (STS/IntelliJ)

===========================================
Spring Boot Application Folder Structure
===========================================

src/main/java => To write application source code

- [Link] (Start class & Entry Point)

src/main/resources => To keep application config file

- [Link]

src/test/java => To write junit test cases

- [Link]

src/test/resources => To keep unit test config files

Maven Dependencies => libraries downloaded

target => byte code (.class files)

[Link] => Maven config file

======================================
What is start class in Spring Boot ?
======================================

=> Start class is entry point for boot application execution

=> It is also called as main class in spring boot

=> When we create boot application, start class will be created by default.

@SpringBootApplication
public class Application {

public static void main(String[] args) {


[Link]([Link], args);
}

===========================================
What is @SpringBootApplication annotation?
==========================================

=> This is used at start class of spring boot...

=> This is equal to 3 annotations

a) @SpringBootConfiguration
b) @EnableAutoConfiguration
c) @ComponentScan

======================================
What is @ComponentScan annotation ?
======================================

=> It is used to scan the project and identify spring beans available in the
application.

=> Component Scanning works based on base-package of application.

Note: The package which contains start class of spring boot is called as base
package.

=> The packages which are starting with base package name are called as sub
packages.

[Link]
- [Link]

[Link]
[Link]
[Link]
[Link]

[Link] ---------- will not be scanned

=============================================================
Q) Can we configure more than one base package in the app ?
==============================================================

@SpringBootApplication
@ComponentScan(basePackages = { "[Link]", "[Link]" })
public class Application {

public static void main(String[] args) {


[Link]([Link], args);
}

===============================================
Q) How to represent java class as Spring Bean ?
===============================================

@Component : To represent java class as spring bean

@Service : To represent java class as spring bean

@Repository : To represent java class as spring bean

@Configuration : To represent java class as configuration class

@Bean : To customize objs creation process ( method level )


@Controller : To handle http requests in web app (c2b)

@RestController : To handle http requests in rest apis

@ComponentScan : To scan spring beans in our applications

=======================================================
Q) What is run ( ) method in spring boot start class ?
=======================================================

=> It is entrypoint for boot application execution

- Bootstrap context
- starting listeners
- prepare Environment
- printing banner
- create context (IOC)
- prepare context
- call runners
- return ioc

================================
What is banner in Spring Boot ?
================================

=> Logo which is printing on console is called banner

=> By default spring logo will be printed on console

=> We can customize banner text by creating "[Link]"

File location : src/main/resources

=> Banner works based on modes

a) console (default)

2) log (print in log file)

3) off

=> We can banner mode like below in [Link] file

[Link]-mode=off

===============================================
How IoC will be started in boot application ?
===============================================

=> run ( ) method is responsible to start IOC in boot app

=> run ( ) method will use predefined class to start IOC based on pom starter

default app (standalone) : spring-boot-starter

Class : AnnotationConfigApplicationContext
web app : spring-boot-starter-web (tomcat)

Class: AnnotationConfigServletWebServerApplicationContext

reactive app : spring-boot-starter-webflux (netty)

Class : AnnotationConfigReactiveWebServerApplicationContext

=================================
What is Runner in Spring Boot ?
=================================

=> Runner is used to execute logic only once when application started.

=> We have 2 types of runners in spring boot

a) ApplicationRunner
b) CommandLineRunner

@Component
public class MyAppRunner implements ApplicationRunner{

@Override
public void run(ApplicationArguments args) throws Exception {
[Link]("my runner executed....");
// logic
}
}

Usecases : insert data in db, delete staging tables data, setup cache.

====================
Day-5 : Autowiring
====================

=> It is used to perform dependency injection

=> Injecting one bean object into another bean object is called as dependency
injection.

=> We can perform dependency injection in 3 ways

1) setter injection
2) constructor injection
3) field injection

Note: IoC container is responsible to perform dependency injection.

=> IOC will manage and colloborate bean objects

=======================
What is Spring Bean ?
=======================

=> The java class which is managed by IoC is called as spring bean.
====================================
What is Constructor injection ?
===================================

=> Injecting dependent bean object into target bean object using target class
constructor is called as CI.

=> To enable this we will write @Autowired at constructor level.

Note: When we have only one parameterized constructor in target class then
@Autowired is optional.

@Service
public class UserService {

private UserDao userDao;

public UserService() {
[Link]("UserService:: default - constructor");
}

@Autowired
public UserService(UserDao userDao) {
[Link]("UserService:: param - Constructor");
[Link] = userDao;
}

public void getName(int id) {


String findName = [Link](id);
[Link]("Name ::" + findName);
}

====================================
What is setter injection ?
===================================

=> Injecting dependent bean object into target bean object using target class
setter method is called as SI.

=> To enable this we will write @Autowired at setter method level.

@Service
public class UserService {

private UserDao userDao;

public UserService() {
[Link]("UserService:: default - constructor");
}

@Autowired
public void setUserDao(UserDao userDao) {
[Link] = userDao;
}

public void getName(int id) {


String findName = [Link](id);
[Link]("Name ::" + findName);
}

===========================
What is field injection ?
===========================

=> Injecting dependent bean object into target bean object using target bean
variable is called as field injection.

Note: Internally IOC will use reflection api to perform field injection.

@Service
public class UserService {

@Autowired
private UserDao userDao;

public void getName(int id) {


String findName = [Link](id);
[Link]("Name ::" + findName);
}

Note: Using reflection api we can access private variables outside of the class.

public class User {

private int age = 20;

public int getAge() {


return age;
}
}

public class Test {

public static void main(String[] args) throws Exception {

Class<?> clz = [Link]("[Link]");

Object object = [Link]();

Field ageField = [Link]("age"); // loading variable


[Link](true); // making variable accessible
[Link](object, 50); // setting value to variable

User u = (User) object;


int age = [Link]();
[Link]("User Age :: " + age);

==================
Autowiring modes
==================

=> Autowiring works based on modes

1) byName : Based on variable name it will identify dependent bean

2) byType : Based on variable datatype it will identify dependent bean.

==================================
What is @Qualifier annotation ?
==================================

=> It is used to identify dependent bean based on bean name

@Component
public class Robot {

@Autowired
@Qualifier("chip64")
private IChip chip;

Note: IChip is an interface which is having 32bit & 64bit implementation classes.

=> Based on above configuration it will inject the bean whose name is "chip64"

===============================================
Q) What is Ambiguity problem in Autowiring ?
===============================================

=> If one interface having more than one impl class then we will get ambiguity
problem in "byType" mode.

=> To resolve byType ambiguity problem we can use @Primary annotation.

=> The bean which is having @Primary annotation will get highest priority for
autowiring.

=====================
What is Bean scope
=====================

=> Bean scope represents how many objects should be created for spring bean.

=> By default every spring bean is singleton (only one object)

=> We can customize bean scope using @Scope annotation


=> prototype scope represents every time new object.

Note: For singleton beans objects will be created when ioc container starting.

@Component
@Scope("prototype")
public class Robot {
//logic
}

==========================================================

@SpringBootApplication

- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan

@Configuration
@Bean
@Component
@Service
@Repository
@Autowired
@Qualifier
@Primary
@Scope

==================================
CI ---> target class constructor
==================================

=> dependent bean is mandatory to create target bean

=> if dependent bean not available then target bean can't created.

=> first dependent bean obj will be created then only target bean object will be
created.

==================================
SI --> target class setter method
==================================

=> First target bean object will be created then dependent object obj will be
created.

=> After target bean creation using target bean obj setter method will be called
(optional)

==================================
FI --> target class variable
==================================

=> IOC will use reflection api to perform FI.

=> Field Inections is simple to write.


=> IOC violating oops principles.

=> It is giving chance to violate Single Responsibility principle.

=========
Summary
==========

1) What is Spring Boot

2) Spring Boot Advantages

- pom starters
- auto configuration
- embedded servers
- actuators

3) First Boot Application

4) Boot Application Folder Structure (Maven)

5) What is start class in Spring Boot

- @SpringBootApplication
- [Link] ()

6) What is Component Scanning

7) How run ( ) method works internally

- bootstrap our app


- start listeners
- prepare env
- print banner
- create IOC
- call runners
- return IOC

8) How to customize banner in boot app

9) How ioc will start in boot application ?

10) Runners in Spring Boot

- Application Runner
- Commandline Runner

11) Spring Boot Annotations

- @SpringBootApplication
- @Configuration
- @Bean
- @Component
- @Service
- @Repository

12) Bean Scopes (@Scope)


- singleton
- prototype
- request
- session

13) Autowiring

- byName
- byType
- @Autowired
- @Qualifier
- @Primary

14) What is Dependency Injection

- Constructor Injection
- Setter Injection
- Field Injection

15) What is IOC container

You might also like