Spring 的 Controller

(参考网上资料,仅学习,面试总结使用)

(1)Spring 的 Controller 默认是单例的

(2)使用非静态的成员变量,否则会发生数据逻辑混乱。正因为单例所以不是线程安全的

(3)spring bean作用域有以下5个:

singleton:单例模式,当spring创建applicationContext容器的时候,spring会欲初始化所有的该作用域实例,加上lazy-init就可以避免预处理;

prototype:原型模式,每次通过getBean获取该bean就会新产生一个实例,创建后spring将不再对其管理;

(下面是在web项目下才用到的)

request:每次请求都新产生一个实例,和prototype不同就是创建后,接下来的管理,spring依然在监听;

session:每次会话,同上;

global session:全局的web域,类似于servlet中的application

(4)在多数情况,只会使用singleton和prototype两种scope,如果在spring配置文件内未指定scope属性,默认为singleton

(5)单例的原因:为了性能

(6)防止数据混乱的解决方法:

1、不要在controller中定义成员变量。

2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope(“prototype”),将其设置为多例模式

3、在Controller中使用ThreadLocal变量

### Spring Framework 中的 Controller 组件使用与示例 Spring 框架中的 Controller 是 MVC(Model-View-Controller)架构模式的核心组件之一,用于处理用户请求并返回响应。在 Spring Web MVC 中,`DispatcherServlet` 负责接收所有 HTTP 请求,并将它们分发到适当的控制器[^1]。 以下是关于如何使用 SpringController 组件的详细说明和示例: #### 1. 基本概念 控制器类通常通过 `@Controller` 注解标记,表示该类是一个控制器组件。此外,Spring Boot 提供了 `@RestController` 注解,它结合了 `@Controller` 和 `@ResponseBody`,简化了 RESTful API 的开发[^5]。 #### 2. 示例代码 以下是一个简单的 Spring Controller 示例,展示如何处理 HTTP 请求并返回 JSON 格式的响应: ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloWorldController { @GetMapping("/hello") public String sayHello(@RequestParam(value = "name", defaultValue = "World") String name) { return String.format("Hello, %s!", name); } } ``` 在这个例子中: - `@RestController` 将该类定义为一个 REST 控制器。 - `@GetMapping("/hello")` 映射 GET 请求到 `/hello` 路径。 - `@RequestParam` 用于从查询参数中提取数据,并提供默认值[^5]。 #### 3. 高级功能 除了基本的请求处理,Spring Controller 还支持许多高级功能,例如路径变量、请求体绑定等。 ##### (1) 使用路径变量 ```java @GetMapping("/greet/{name}") public String greetUser(@PathVariable String name) { return "Hello, " + name + "!"; } ``` 这里使用了 `@PathVariable` 来捕获 URL 中的动态部分。 ##### (2) 接收 JSON 数据 ```java @PostMapping("/user") public User createUser(@RequestBody User user) { // 处理用户数据 return user; } ``` `@RequestBody` 注解允许将请求体中的 JSON 数据自动映射到 Java 对象[^5]。 #### 4. 日志记录 虽然 Spring 默认使用 Commons Logging,但推荐使用 SLF4J 作为日志框架,因为它更加灵活且性能更好[^3]。可以通过以下方式配置日志记录: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; @RestController public class LoggingController { private static final Logger logger = LoggerFactory.getLogger(LoggingController.class); @GetMapping("/log") public String logMessage() { logger.info("This is an info message."); return "Logged successfully."; } } ``` #### 5. 集成与扩展 Spring Controller 完全集成到 IOC 容器中,可以轻松注入其他 Bean 或服务。例如: ```java @Service public class GreetingService { public String getGreeting(String name) { return "Hello, " + name; } } @RestController public class GreetingController { private final GreetingService greetingService; public GreetingController(GreetingService greetingService) { this.greetingService = greetingService; } @GetMapping("/greet-service") public String greetViaService(@RequestParam String name) { return greetingService.getGreeting(name); } } ``` ### 总结 SpringController 组件提供了强大的功能来处理 HTTP 请求,并与其他 Spring 特性无缝集成。无论是简单的 REST API 还是复杂的 Web 应用程序,都可以通过合理设计控制器来实现高效开发[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值