- Boilerplate Code:
- Origin: The term “boilerplate” comes from the early days of newspapers. They used sturdy steel plates to print common, repeated text (like the newspaper’s name or standard legal notices) that appeared in every edition.
- In Programming: It refers to sections of code that have to be included in many places with little or no alteration. This code is necessary for the program to work but doesn’t directly relate to the program’s main purpose.
- Examples:
- Java:
public static void main(String[] args) { ... }
in every executable Java program. - HTML:
<!DOCTYPE html><html><head><title></title></head><body></body></html>
in every HTML file.
- Java:
- Configuration in Programming:
- Configuration code sets up the environment, dependencies, and behavior of a program or framework.
- It tells the system how components should interact, where to find resources, what settings to use, etc.
- In Java/Spring:
- XML files for bean definitions
- Java-based configuration classes with annotations like
@Configuration
,@Bean
- Properties files (e.g.,
application.properties
orapplication.yml
)
- Boilerplate Configuration:
- In the context of Spring (before Spring Boot), developers had to write a lot of repetitive configuration code for common tasks.
- This configuration was largely the same across different projects, with only minor changes.
- Examples:
- Database: Always need to define data source, entity manager, transaction manager.
xml <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mydb"/> ... </bean> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource"/> ... </bean> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean>
- Web MVC: Configure view resolver, enable annotations, set up resource handlers.
xml <mvc:annotation-driven/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> <mvc:resources mapping="/resources/**" location="/resources/"/>
- Security: Set up authentication manager, define user service, configure access rules.
- Database: Always need to define data source, entity manager, transaction manager.
- The Problem with Boilerplate Configuration:
- Repetitive: Copy-pasting similar code across projects.
- Error-prone: Easy to miss a detail or make a typo.
- Time-consuming: More time on setup, less on actual development.
- Cognitive load: Developers need to remember many configuration details.
- Hard to maintain: When standards change, you update everywhere.
- Spring Boot’s Solution:
- Auto-configuration: Guesses what you need based on dependencies.
- Convention over Configuration: Provides smart defaults.
- Properties: Simple key-value pairs for common settings.
- Starters: Bundle related dependencies with pre-configured defaults.
So, in essence, “boilerplate configuration” in Spring refers to the repetitive, largely unchanged setup code that developers had to write in every project. This code was necessary but didn’t directly contribute to the unique aspects of each application. Spring Boot was created to eliminate this boilerplate, allowing developers to focus more on writing the code that makes their application unique.