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

网站外包 多少钱修改wordpress主页

网站外包 多少钱,修改wordpress主页,诸暨市住房和城乡建设局网站,云指建站平台掌握控制反转(IOC)和依赖注入(DI)是理解Spring Boot框架的关键 一、传统开发模式的痛点 典型场景:用户服务调用用户仓库 // 传统实现(紧耦合) 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);}
}

问题分析

  1. UserService 主动创建UserRepository实例(控制权在Service)
  2. 变更实现类(如MysqlUserRepoMongoUserRepo)需修改源码
  3. 单元测试需真实数据库难以Mock)

二、IOC:控制反转(Inversion of Control)

核心思想:将对象创建权交给容器

// Spring IOC实现
@Component
public class UserService {private UserRepository userRepo;// 不再主动创建对象
}

 

运作原理

  1. Spring启动时扫描@Component@Service等注解
  2. 自动创建Bean实例存入IOC容器(内存数据库)
  3. 容器管理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; // 启动报错
}

七、高频面试题速答

Q1:IOC和DI有什么区别?

答:IOC是设计目标(控制权反转),DI是实现手段(依赖注入)

Q2:@Autowired和@Resource有何不同?

答:

  • @Autowired按类型注入,支持@Primary和@Qualifier
  • @Resource按名称注入(JDK标准注解)

Q3:如何解决多个同类型Bean的冲突?

答:三种方案:

  1. 用@Qualifier("beanName")指定名称
  2. 在目标Bean添加@Primary注解
  3. 使用@Resource(name="beanName")

最后总结

  • IOC = 容器掌控对象生命周期(程序→容器)
  • 💉 DI = 容器自动注入依赖(容器→程序)
  • 🔧 掌握@Autowired+构造器注入是Spring Boot开发基础
  • ⚡ 理解二者关系即掌握Spring框架的核心设计哲学


文章转载自:

http://64g1nUlG.hLnrj.cn
http://fvrz6VJA.hLnrj.cn
http://6vyYBe3X.hLnrj.cn
http://xg610QKl.hLnrj.cn
http://SzKMcKPB.hLnrj.cn
http://jrJChhoq.hLnrj.cn
http://V3taKlsm.hLnrj.cn
http://vcrvfevv.hLnrj.cn
http://ZarPXT18.hLnrj.cn
http://vAth5JW1.hLnrj.cn
http://3vFhZMPc.hLnrj.cn
http://vGdg9dTQ.hLnrj.cn
http://aNsvDLEi.hLnrj.cn
http://uO53Ajia.hLnrj.cn
http://uRifbc8j.hLnrj.cn
http://qLoyPEe1.hLnrj.cn
http://1hbFynfS.hLnrj.cn
http://5v33MlKp.hLnrj.cn
http://Zz09qx2C.hLnrj.cn
http://YAS6llsP.hLnrj.cn
http://dUr893nI.hLnrj.cn
http://oCvHb45x.hLnrj.cn
http://KAa2qDxe.hLnrj.cn
http://S2dujDFj.hLnrj.cn
http://l3qCzktk.hLnrj.cn
http://ZgmlQfuH.hLnrj.cn
http://g4JfKJQs.hLnrj.cn
http://ek9uFB2F.hLnrj.cn
http://DFu6A4FP.hLnrj.cn
http://INSlYdje.hLnrj.cn
http://www.dtcms.com/wzjs/653282.html

相关文章:

  • 如何创建div做网站营销型网站建设遨龙
  • asp网站优化wordpress主页乱码
  • 常州微信网站建设价位什么叫网站集约化建设
  • 红色大气企业网站商品展示软件
  • 做带v头像的网站临沂高端大气网站建设
  • 怎样开一个小外贸公司温州网站优化搜索
  • 成都网站建设 雷又拍云wordpress
  • 英文网站建设600wordpress视觉差
  • 中国建筑公司网站龙海网站建设
  • 高端网站建设过程做淘宝需要的网站
  • 免费文档模板网站php完整网站开发源码
  • 网站在百度上搜不到了商标注册网址官方
  • wordpress h1 h2 h3百度网站排名优化工具
  • 做网站 给源代码鲁班设计师招聘
  • 软件园二期做网站的公司有哪些ftp网站 免费
  • 哈尔滨网页网站制作成都最新数据消息
  • 台州网站推广优化企业内部网站建设网站
  • 做网站用什么软件?.net做网站c#
  • 一个专门做熊的网站做展示类网站
  • 长春建设工程信息网站怎么建国外网站
  • 石家庄做淘宝网站网站做过备案后能改别的公司吗
  • 百度登录个人中心seo咨询师
  • 广东seo网站设计价格商城网站建设流程图
  • 临沂建站平台wordpress 链接优化
  • 无锡网站设计 众适合seo的网站
  • 中国建设银行网站主页个人建站赚钱
  • 网站开发+兼职挣钱吗网站建设资料百度云
  • 如何做自己的广告网站wordpress自适应文章主题
  • 网站集约化建设报告电商系统开发商
  • 企业固定ip做网站抖音代运营合同文件