当前位置: 首页 > news >正文

Spring 01

今天是2025/0420 19:44 day 21

总路线请移步主页Java大纲相关文章

今天进行Spring 1,2,3 个模块的归纳

最近在忙毕设,更新有点慢,见谅

首先是Spring 的相关内容概括的思维导图

一、核心概念详解

1. IoC容器

1.1 工作原理
// 典型使用示例
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserService userService = context.getBean(UserService.class);
1.2 依赖注入方式对比
方式优点缺点
构造器注入不可变对象,强依赖参数多时代码臃肿
Setter注入灵活性高对象可能处于部分初始化状态
字段注入代码简洁难以测试,隐藏依赖关系
1.3 注解驱动开发
@Configuration
public class AppConfig {@Bean public DataSource dataSource() {return new DriverManagerDataSource(...);}
}

2. AOP编程

2.1 核心概念图解
[业务组件] --交叉关注点--> [日志/事务/安全]\                  /\                /[AOP代理层]
2.2 通知类型示例
@Aspect
public class LogAspect {@Before("execution(* com.example.service.*.*(..))")public void logBefore(JoinPoint jp) {System.out.println("方法调用前: " + jp.getSignature());}@Around("@annotation(com.example.Monitor)")public Object monitorPerformance(ProceedingJoinPoint pjp) throws Throwable {long start = System.currentTimeMillis();Object result = pjp.proceed();System.out.println("方法执行耗时: " + (System.currentTimeMillis()-start));return result;}
}

二、Spring容器深度解析

1. Bean生命周期全流程

1. 实例化 → 2. 属性填充 → 3. BeanNameAware → 4. BeanFactoryAware↓
5. PreInitialization(BeanPostProcessor) → 6. @PostConstruct↓
7. InitializingBean → 8. 自定义init-method → 9. PostInitialization

2. 作用域对比实验

@Scope("prototype")
@Bean
public PrototypeBean pb() { return new PrototypeBean(); }
​
// 测试代码:
PrototypeBean b1 = context.getBean(PrototypeBean.class);
PrototypeBean b2 = context.getBean(PrototypeBean.class);
System.out.println(b1 == b2);  // 输出false

3. 条件化配置

@Conditional(ProdEnvCondition.class)
@Bean
public DataSource prodDataSource() {return new ProductionDataSource();
}
​
public class ProdEnvCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {return "prod".equals(context.getEnvironment().getProperty("env"));}
}

三、Spring MVC全流程剖析

1. 请求处理时序图

HTTP Request → DispatcherServlet → HandlerMapping → Controller → 
ModelAndView → ViewResolver → View → HTTP Response

2. 控制器开发模式

2.1 传统控制器
@Controller
@RequestMapping("/users")
public class UserController {@GetMapping("/{id}")public String getUser(@PathVariable Long id, Model model) {model.addAttribute("user", userService.findById(id));return "userDetail";}
}
2.2 RESTful风格
@RestController
@RequestMapping("/api/users")
public class UserApiController {
​@PostMappingpublic ResponseEntity<User> createUser(@RequestBody @Valid User user) {User saved = userService.save(user);URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(saved.getId()).toUri();return ResponseEntity.created(location).body(saved);}
}

3. 异常处理机制

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(DataNotFoundException.class)@ResponseStatus(HttpStatus.NOT_FOUND)public ErrorResponse handleNotFound(DataNotFoundException ex) {return new ErrorResponse("NOT_FOUND", ex.getMessage());}@ExceptionHandler(MethodArgumentNotValidException.class)public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {Map<String, String> errors = new HashMap<>();ex.getBindingResult().getAllErrors().forEach(error -> {String fieldName = ((FieldError) error).getField();errors.put(fieldName, error.getDefaultMessage());});return ResponseEntity.badRequest().body(errors);}
}

http://www.xdnf.cn/news/54397.html

相关文章:

  • 前端与传统接口的桥梁:JSONP解决方案
  • 大数定理(LLN)习题集 · 答案与解析篇
  • QCPAxis、QCPGrid 和 QCPAxisTicker 三者关系
  • 关于隔离2:ADC芯片
  • 京东 h5st 5.1 详情 京东滑块 cfe 分析
  • Cursor工具你会用了吗
  • leetcode0078. 子集-medium
  • stm32 13位时间戳转换为时间格式、对时
  • Day58 | 179. 最大数、316. 去除重复字母、334. 递增的三元子序列
  • Linux系统的远程终端登录、远程图形桌面访问、 X图形窗口访问
  • 无回显RCE
  • 每日一道leetcode(补充版)
  • 具身智能零碎知识点(四):联合嵌入预测架构(JEPAs)详解
  • acwing--动态规划【线性dp】4/20、4/21
  • 网页的URL绝对路径和相对路径,以及各自的使用场景
  • 【Vulkan 入门系列】创建逻辑设备和图形、呈现队列,显示尺寸更改(三)
  • 错误: 找不到或无法加载主类 HelloWorld,cmd窗口,java命令,提示
  • PT站中的tracker
  • LangChain4j语言模型选型指南:主流模型能力全景对比
  • 生成式AI对话中提示词策略:明确问题、明确目标和提供背景信息是最有效的策略
  • 【CPU】中断即时性
  • leetcode(01)森林中的兔子
  • 机器学习(神经网络基础篇)——个人理解篇6(概念+代码)———参数优化篇
  • 模型上下文协议(MCP)详解
  • 【物理学】物理学——电机控制中常用的定则
  • AI 中的 CoT 是什么?一文详解思维链
  • select、poll、epoll实现多路复用IO并对比差异
  • C++类继承关键点总结
  • 模拟实现strcmp,strcpy,strlen,strcat,strstr
  • 类转换与强制类型转换详解