Spring
Spring Framework is a comprehensive programming and configuration model for modern Java-based enterprise applications. It offers a robust ecosystem with Spring Boot, Spring Security, Spring Data, and more.
Core Concepts
Dependency Injection
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}Spring Boot
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}REST Controllers
Basic Controller
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
@GetMapping
public List<User> getAllUsers() {
return userService.findAll();
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.save(user);
}
}Data Access
JPA Repository
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Getters and setters
}
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email);
}Security
Spring Security Configuration
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/public/**").permitAll()
.anyRequest().authenticated()
.and()
.oauth2ResourceServer()
.jwt();
}
}Testing
Unit Testing
@SpringBootTest
class UserServiceTest {
@MockBean
private UserRepository userRepository;
@Autowired
private UserService userService;
@Test
void whenValidUser_thenUserShouldBeSaved() {
// Test implementation
}
}Best Practices
Project Structure
project/
βββ src/
β βββ main/
β β βββ java/
β β β βββ com/example/
β β β βββ config/
β β β βββ controller/
β β β βββ model/
β β β βββ repository/
β β β βββ service/
β β βββ resources/
β βββ test/
βββ pom.xmlConfiguration Management
- Use application.properties/yaml
- Profile-based configuration
- Externalized configuration
- Environment variables
Performance Optimization
- Connection pooling
- Caching with Spring Cache
- Async processing
- JPA optimization
Deployment
Production Ready Features
- Actuator endpoints
- Health checks
- Metrics collection
- Distributed tracing
Deployment Options
- JAR deployment
- Docker containers
- Kubernetes
- Cloud platforms (AWS, GCP, Azure)