---
description: Q&A about Spring boot
---

# Spring Boot Learning

1. **What is the difference between bootstrap.properties and application.properties ?**\
   **Ans:**  In spring boot it will has 2 context that will be created before the application start the first is bootstrap context and the second context is application context. Boostrap context is parent of application context that will be created before. The difference of this 2 context, bootstrap context will run before application start so we use bootstrap.properties to load configuration from external source such as spring cloud.  \

2. **What is the difference between @Controller and @RestController ?**\
   **Ans:** @Controller is used in Spring for Web MVC to determine controller class. @RestController is similar to @Controller but it will be used for Rest webservice.\
   @RestController = @Controller + @RespBody\

3. **What is the difference between @Valid and @Validated ?**\
   **Ans:** @Valid is used on the method and it's not support for group level.@Validated is used on the class and support for group level futhermore When you need to validate with List type , you must use @Validated on the controller class and @Valid inside the method.\

4. **What is the difference between create object by new Object() or @Builder(builder pattern) ?**\
   **Ans:** Create object with @Builder the object will be immutable so it can't have race condition for multi-thread process but create object by new Object() ,the attribute value can update by setter method. \

5. **What is the difference between Logback and Log4j ?**\
   **Ans:** Log4j is a utility for logging  in java that already deprecated. For now it has Log4j2 or Sl4j instead but Logback is a framework that consolidate all of this utilities.\

6. **What is the diifference between @Autowired via field injection or constructor injection ?**\
   **Ans:** Field injection won't create instance of dependency immediately when create bean but constructor injection will create it immediately and more thread safe (because it is able to use `final`) than field injection. For implementaion of constructor injection when you have more than 1 constructor , you need to add @Autowired on constructor.\
   **Ref:** [https://stackoverflow.com/questions/40620000/spring-autowire-on-properties-vs-constructor](https://stackoverflow.com/questions/40620000/spring-autowire-on-properties-vs-constructor)\

7. **What is the diifference between JdbcTemplate  update() vs execute() ?**\
   **Ans:** execute() always use for managing database such as create table because it returns void but update() will use for DML because it returns number of record that will be updated.
