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

网站建设建站在线建站网站免费推广大全

网站建设建站在线建站,网站免费推广大全,热门推广平台,wordpress学习 知乎掌握控制反转#xff08;IOC#xff09;和依赖注入#xff08;DI#xff09;是理解Spring Boot框架的关键 一、传统开发模式的痛点 典型场景#xff1a;用户服务调用用户仓库 // 传统实现#xff08;紧耦合#xff09; public class UserService {private UserReposi…掌握控制反转IOC和依赖注入DI是理解Spring Boot框架的关键 一、传统开发模式的痛点 典型场景用户服务调用用户仓库 // 传统实现紧耦合 public class UserService {private UserRepository userRepo new UserRepository();public User findUser(Long id) {return userRepo.findById(id);} } 问题分析 UserService 主动创建UserRepository实例控制权在Service变更实现类如MysqlUserRepo→MongoUserRepo需修改源码单元测试需真实数据库难以Mock 二、IOC控制反转Inversion of Control 核心思想将对象创建权交给容器 // Spring IOC实现 Component public class UserService {private UserRepository userRepo;// 不再主动创建对象 } 运作原理 Spring启动时扫描Component, Service等注解自动创建Bean实例存入IOC容器内存数据库容器管理Bean的生命周期创建→装配→销毁 IOC优势 解耦调用者与被调用者分离 资源集中管理容器统一分配对象 可扩展性方便替换实现类 三、DI依赖注入Dependency Injection 核心思想由容器动态注入依赖对象 Spring提供三种主流注入方式 1. 构造器注入Spring官方推荐 Service public class UserService {private final UserRepository userRepo;// 容器自动注入依赖Autowiredpublic UserService(UserRepository userRepo) {this.userRepo userRepo;} } 优势 保证依赖不可变final关键字 避免循环依赖问题 明确依赖关系 2. Setter注入 Service public class UserService {private UserRepository userRepo;Autowiredpublic void setUserRepo(UserRepository userRepo) {this.userRepo userRepo;} } 适用场景可选依赖或需要重新配置的依赖 3. 字段注入 Service public class UserService {Autowired // 直接注入字段private UserRepository userRepo; } 注意虽然简洁但不利于单元测试需通过反射注入 四、IOC容器工作流程 sequenceDiagram启动类-IOC容器 SpringBootApplicationIOC容器-扫描器 组件扫描扫描器-Bean工厂 发现Component/BeanBean工厂-依赖解析 分析依赖关系依赖解析-DI引擎 创建依赖图谱DI引擎-Bean实例化 构造器Setter注入Bean实例化-IOC容器 托管BeanIOC容器-应用 提供运行时Bean 关键注解解析  注解 作用 示例 Component 通用Bean声明 Component public class MyBean Autowired 自动依赖注入 Autowired private Dependency dep; Qualifier 解决歧义注入 Qualifier(mysqlImpl) Primary 设置首选Bean Bean Primary Lazy 延迟初始化 Lazy Service 五、彻底理解IOC与DI的关系 概念对比表 概念 控制反转 (IOC) 依赖注入 (DI) 核心思想 转移对象控制权 实现控制反转的具体手段 实现方式 容器托管Bean 通过构造器/Setter注入依赖 关注点 谁控制对象的生命周期 如何传递依赖对象 关系 设计思想 具体实现技术 重要结论 DI是IOC的一种实现方式还有服务定位器等Spring选择DI实现IOC 六、最佳实践与常见误区 正确姿势 // 1. 使用构造器注入 final Service public class OrderService {private final PaymentService paymentService;Autowired // Spring 4.3可省略public OrderService(PaymentService paymentService) {this.paymentService paymentService;} }// 2. 面向接口编程 public interface UserRepository {...} Repository public class JpaUserRepository implements UserRepository {...}// 3. 使用Configuration声明配置类 Configuration public class AppConfig {Beanpublic DataSource dataSource() {return new HikariDataSource();} } 典型错误 // 反例1在Bean中主动new对象 Service public class UserService {private UserRepository repo new UserRepository(); // 破坏IOC }// 反例2循环依赖 Service public class A {Autowired B b; } Service public class B {Autowired A a; // 启动报错 } 七、高频面试题速答 Q1IOC和DI有什么区别 答IOC是设计目标控制权反转DI是实现手段依赖注入 Q2Autowired和Resource有何不同 答 Autowired按类型注入支持Primary和QualifierResource按名称注入JDK标准注解 Q3如何解决多个同类型Bean的冲突 答三种方案 用Qualifier(beanName)指定名称在目标Bean添加Primary注解使用Resource(namebeanName) 最后总结 IOC  容器掌控对象生命周期程序→容器 DI  容器自动注入依赖容器→程序 掌握Autowired构造器注入是Spring Boot开发基础⚡ 理解二者关系即掌握Spring框架的核心设计哲学
http://www.hkea.cn/news/14506878/

相关文章:

  • 深圳企业网站建设服务好网站多少钱
  • 个人网站如何做支付功能厦门市建设工程安全质量协会网站
  • 潍柴新建站登录网址现在建网站多少钱
  • 以数字域名为网址的网站成都专业网站制作哪家好
  • dz可以做门户网站吗开发公司把已经出售的房子一房二卖卖给股东个人
  • 淘宝做链接的网站手机网站会员识别功能
  • 网站开发手册下载小程序可做网站吗
  • 网站建设的维护与更新google官方下载安装
  • 从用户旅程角度做网站分析wordpress 中文摘要
  • 贵阳网站建设公司排名wordpress搭建问题
  • 小米的网站是哪个公司做的asp做的网站亚丝娜娜本子全彩
  • 网站是每年都要付费吗网站设置主网
  • 湘潭网站建设出色磐石网络wordpress如何屏蔽特定国家的用户
  • 学校网站网页设计湛江建设培训学校网站
  • 快手里做网站荣耀封面的视频微信服务号开发方案
  • 手机网站页面布局深圳商业网站建设
  • 网站推广智选刺盾云下拉家装公司名称大全
  • 做调查的有哪些网站公司网站cms
  • 奎屯网站制作做服装加工哪个网站比较好
  • 住房和城市建设部网站免备案虚拟主机空间
  • 外贸自建站是什么意思中学生做的网站有哪些
  • asp.net mvc5网站开发之美北京php网站开发
  • 网站下载器网站如何免费推广
  • 企业网站建设排名价格网站收录查询平台
  • 英文网站制作手机网站不收录
  • 网站建设收费标准公司南部县网站建设
  • 沧州市网站建设公司cms做视频网站
  • 北京做网站需要多少钱微信抽奖小程序制作
  • 网站要怎么做关键词做网页的网站素材
  • 简单做动画的网站做影视网站挣钱吗