Spring框架基础¶
概述¶
Spring框架是一个开源的Java平台,它提供了全面的基础设施支持,用于开发Java应用程序。Spring框架的核心特性是依赖注入(DI)和面向切面编程(AOP),这些特性使得Spring成为企业级应用开发的首选框架。
依赖注入(Dependency Injection)¶
依赖注入是Spring框架的核心概念之一。它允许对象定义它们的依赖关系,而不是在代码中硬编码这些依赖关系。Spring容器负责在运行时注入这些依赖。
示例1:简单的依赖注入¶
// 定义一个简单的服务接口
public interface MessageService {
String getMessage();
}
// 实现服务接口
public class EmailService implements MessageService {
@Override
public String getMessage() {
return "Email message";
}
}
// 使用依赖注入的类
public class MessageProcessor {
private MessageService service;
// 通过构造函数注入依赖
public MessageProcessor(MessageService service) {
this.service = service;
}
public void processMessage() {
System.out.println(service.getMessage());
}
}
// 配置Spring容器
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MessageService emailService() {
return new EmailService();
}
@Bean
public MessageProcessor messageProcessor() {
return new MessageProcessor(emailService());
}
}
// 主应用程序
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MessageProcessor processor = context.getBean(MessageProcessor.class);
processor.processMessage();
}
}
解释: - MessageService
是一个接口,EmailService
是其实现。 - MessageProcessor
类通过构造函数注入 MessageService
的实例。 - AppConfig
类使用 @Configuration
和 @Bean
注解来配置Spring容器。 - MainApp
类启动Spring容器并获取 MessageProcessor
的实例,调用其方法。
面向切面编程(Aspect-Oriented Programming, AOP)¶
AOP 是Spring框架的另一个核心特性,它允许开发者通过定义切面来模块化横切关注点(如日志记录、事务管理等)。
示例2:简单的AOP示例¶
// 定义一个切面
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class LoggingAspect {
@Before("execution(* com.example.service.*.*(..))")
public void logBefore() {
System.out.println("Before method execution");
}
}
// 配置Spring容器
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
@Bean
public LoggingAspect loggingAspect() {
return new LoggingAspect();
}
@Bean
public MessageService emailService() {
return new EmailService();
}
}
// 主应用程序
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MessageService service = context.getBean(MessageService.class);
service.getMessage();
}
}
解释: - LoggingAspect
类定义了一个切面,使用 @Before
注解在目标方法执行前执行日志记录。 - AppConfig
类启用AOP支持并注册切面。 - MainApp
类启动Spring容器并调用 MessageService
的方法,触发切面。
Spring MVC¶
Spring MVC 是Spring框架的一个模块,用于构建Web应用程序。它基于模型-视图-控制器(MVC)设计模式。
示例3:简单的Spring MVC应用¶
// 定义一个控制器
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@GetMapping("/hello")
@ResponseBody
public String sayHello() {
return "Hello, Spring MVC!";
}
}
// 配置Spring MVC
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@EnableWebMvc
public class WebConfig {
// 其他配置
}
// 主应用程序
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MvcApplication {
public static void main(String[] args) {
SpringApplication.run(MvcApplication.class, args);
}
}
解释: - HelloController
类定义了一个简单的控制器,处理 /hello
路径的GET请求。 - WebConfig
类启用Spring MVC支持。 - MvcApplication
类启动Spring Boot应用程序。
练习题¶
-
简单练习:创建一个Spring应用程序,使用依赖注入将一个简单的
GreetingService
注入到GreetingController
中,并在/greet
路径上返回问候语。 -
中级练习:扩展上述应用程序,添加一个切面来记录每次调用
GreetingService
的时间。 -
高级练习:创建一个Spring MVC应用程序,使用Thymeleaf模板引擎渲染一个包含用户输入表单的页面,并在提交表单后显示用户输入的内容。
总结¶
- 依赖注入:Spring通过依赖注入管理对象之间的依赖关系,使得代码更加模块化和可测试。
- 面向切面编程:AOP允许开发者通过切面模块化横切关注点,如日志记录和事务管理。
- Spring MVC:Spring MVC模块提供了一个强大的框架来构建Web应用程序,基于MVC设计模式。
通过掌握这些基础概念,你将能够使用Spring框架构建复杂的Java应用程序。