Detailed Course Outline
Introduction to Spring
- Java configuration and the Spring application context
 - @Configuration and @Bean annotations
 - @Import: working with multiple configuration files
 - Defining bean scopes
 - Launching a Spring Application and obtaining Beans
 
Spring JAVA Configuration: A Deeper Look
- External properties & Property sources
 - Environment abstraction
 - Using bean profiles
 - Spring Expression Language (SpEL)
 
Annotation-based Dependency Injection
- Component scanning
 - Dependency Injection using @Autowired
 - Java configuration versus annotations, mixing, best practices
 - Lifecycle annotations: @PostConstruct and @PreDestroy
 - Stereotypes (@Service, @Repository, etc.) and meta-annotations
 
Factory Pattern in Spring
- Using Spring FactoryBeans
 
Advanced Spring: How Does Spring Work Internally?
- The Spring Bean Lifecycle
 - BeanFactoryPostProcessor and BeanPostProcessor
 - Spring Bean Proxies
 - Best Practice for bean types and bean names
 
Aspect-oriented programming
- What problems does AOP solve?
 - Defining pointcut expressions
 - Implementing various types of advice
 - Application development with AOP
 
Testing a Spring-based Application
- Spring 5 integration testing with JUnit 5
 - Application context caching and the @DirtiesContext annotation
 - Profile selection with @ActiveProfiles
 - Easy test data setup with @Sql
 
Data Access and JDBC with Spring
- How Spring integrates with existing data access technologies
 - DataAccessException hierarchy and @Repository
 - Spring‘s JdbcTemplate and callback interfaces
 
Database Transactions with Spring
- Transactions overview
 - Transaction management with Spring
 - Transaction propagation and rollback rules
 - Transactions and integration testing
 
Spring Boot Introduction
- Introduction to Spring Boot Features
 - Value Proposition of Spring Boot
 - Creating a simple Boot application using Spring Initializer website
 
Spring Boot Dependencies, Auto-configuration, and Runtime
- Dependency management using Spring Boot starters
 - How auto-configuration works
 - Configuration properties with Spring Boot
 - Overriding auto-configuration
 - Using CommandLineRunner and ApplicationRunner
 
JPA with Spring and Spring Data
- Quick introduction to ORM with JPA
 - Benefits of using Spring with JPA
 - JPA configuration in Spring
 - Configuring Spring JPA using Spring Boot
 - Spring Data JPA dynamic repositories
 
Spring MVC Architecture and Overview
- Introduction to Spring MVC and request processing
 - Controller method signatures
 - Using @Controller, @RestController, @RequestMapping, @GetMapping, etc, annotations
 - Configuring Spring MVC with Spring Boot
 - Spring Boot packaging options, JAR or WAR
 
Rest with Spring MVC
- An introduction to the REST architectural style
 - Controlling HTTP response codes with @ResponseStatus
 - Implementing REST with Spring MVC, @RequestBody and @ResponseBody
 - Spring MVC’s HttpMessageConverters and automatic content negotiation
 - REST clients with RestTemplate, RestClient and WebClient: selection and implementation
 
Spring Boot Testing Enhancements and abstractions
- Spring Boot testing overview
 - Integration testing using @SpringBootTest
 - Web slice testing with MockMvc framework
 - Slices to test different layers of the application
 
Spring Security
- What problems does Spring Security solve?
 - Configuring authentication
 - Implementing authorization by URL Matching
 - Authorization at the Java method level
 - Understanding the Spring Security filter chain
 - Spring security testing
 
The Resource Server in OAuth 2.0
- Configuring and implementing a secure web-application with JSON Web Token-based authorization
 
Actuators, Metrics and Health Indicators
- Exposing and querying Spring Boot Actuator endpoints
 - Custom Metrics
 - Health Indicators
 - Creating custom Health Indicators