GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • java.evolved

This view

  • Original page
  • New address

GeezerVison is showing javaevolved.dev — Spring Framework — java.evolved

Home / Topics / Spring Framework
🏷 Spring Framework 4 patterns

Topic: Spring Framework

All Java patterns related to Spring Framework — java.evolved

Enterprise

Spring XML Bean Config vs Annotation-Driven

Old <!-- applicationContext.xml --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="userRepository" class="com.example.UserRepository"> <property name="dataSource" ref="dataSource"/> </bean> <bean id="userService" class="com.example.UserService"> <property name="repository" ref="userRepository"/> </bean> </beans>
Modern @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } @Repository public class UserRepository { private final JdbcTemplate jdbc; public UserRepository(JdbcTemplate jdbc) { this.jdbc = jdbc; } } @Service public class UserService { private final UserRepository repository; public UserService(UserRepository repository) { this.repository = repository; } }
hover to see modern →
JDK 17+ learn more →
Enterprise

Spring Framework 7 API Versioning

Old // Version 1 controller @RestController @RequestMapping("/api/v1/products") public class ProductControllerV1 { @GetMapping("/{id}") public ProductDtoV1 getProduct( @PathVariable Long id) { return service.getV1(id); } } // Version 2 — duplicated structure @RestController @RequestMapping("/api/v2/products") public class ProductControllerV2 { @GetMapping("/{id}") public ProductDtoV2 getProduct( @PathVariable Long id) { return service.getV2(id); } }
Modern // Configure versioning once @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureApiVersioning( ApiVersionConfigurer config) { config.useRequestHeader("X-API-Version"); } } // Single controller, version per method @RestController @RequestMapping("/api/products") public class ProductController { @GetMapping(value = "/{id}", version = "1") public ProductDtoV1 getV1(@PathVariable Long id) { return service.getV1(id); } @GetMapping(value = "/{id}", version = "2") public ProductDtoV2 getV2(@PathVariable Long id) { return service.getV2(id); } }
hover to see modern →
JDK 17+ learn more →
Enterprise

Spring Null Safety with JSpecify

Old import org.springframework.lang.NonNull; import org.springframework.lang.Nullable; public class UserService { @Nullable public User findById(@NonNull String id) { return repository.findById(id).orElse(null); } @NonNull public List<User> findAll() { return repository.findAll(); } @NonNull public User save(@NonNull User user) { return repository.save(user); } }
Modern import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; @NullMarked public class UserService { public @Nullable User findById(String id) { return repository.findById(id).orElse(null); } public List<User> findAll() { return repository.findAll(); } public User save(User user) { return repository.save(user); } }
hover to see modern →
JDK 17+ learn more →
Enterprise

Spring Boot MVC Configuration

Old @EnableWebMvc @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addViewControllers( ViewControllerRegistry registry) { registry.addViewController("/").setViewName("home"); } }
Modern @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addViewControllers( ViewControllerRegistry registry) { registry.addViewController("/").setViewName("home"); } }
hover to see modern →
JDK 17+ learn more →
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.