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

建站公司咨询潍坊网站建设公司慕枫

建站公司咨询,潍坊网站建设公司慕枫,什么学做网站,免费在线图片制作文章目录 1. 引言2. 不推荐使用Autowired的原因3. Spring提供了三种主要的依赖注入方式3.1. 构造函数注入#xff08;Constructor Injection#xff09;3.2. Setter方法注入#xff08;Setter Injection#xff09;3.3. 字段注入#xff08;Field Injection#xff09; 4… 文章目录 1. 引言2. 不推荐使用Autowired的原因3. Spring提供了三种主要的依赖注入方式3.1. 构造函数注入Constructor Injection3.2. Setter方法注入Setter Injection3.3. 字段注入Field Injection 4. 推荐方案5. 参考博客 1. 引言 Field injection is not recommended意思就是不推荐使用字段注入的方式不是不推荐Autowired注解以前为了简便就直接使用 Resource代替程序员都在不断追求完美。。。 接下来我们实实在在的分析一下为啥不推荐以及到底推荐那种方式注入。 2. 不推荐使用Autowired的原因 不推荐使用Autowired进行字段注入的原因有以下几点 紧耦合性Tight Coupling字段注入将依赖关系直接注入到类的字段上导致类与依赖之间产生紧密的耦合。这使得代码难以修改和扩展并且增加了对具体实现的依赖性。 隐藏依赖关系Hidden Dependencies字段注入隐藏了类的依赖关系使代码不够透明和可读。读取代码时无法立即知道类所依赖的其他组件或服务。 单元测试困难Difficult Unit Testing由于字段注入需要依赖容器来自动注入依赖项导致在编写单元测试时必须依赖完整的容器环境。这增加了测试的复杂性并且可能会导致测试变慢或不稳定。 难以发现依赖问题Dependency Issues字段注入使得依赖可以在运行时更改这增加了代码维护的复杂性。同时如果依赖项没有正确配置或不存在就会在运行时出现错误而不是在编译时就能发现。 相比之下构造器注入Constructor Injection或Setter方法注入Setter Injection提供了更好的可测试性、可维护性和代码清晰度。它们明确列出了类所需的依赖项并使得依赖关系更加透明和易于理解。这些方法也更容易进行单元测试且不需要依赖完整的容器环境。 3. Spring提供了三种主要的依赖注入方式 3.1. 构造函数注入Constructor Injection 通过构造函数将依赖项传递给目标类。这种方式明确声明了类所需的依赖项并且使得类的实例在创建时就具备了必要的依赖关系。示例代码如下 Component public class SLFBClient {private final DataSourceFactory dataSourceFactory;/*** Autowired 从spring4.3开始可以省略*/ // Autowiredpublic SLFBClient(DataSourceFactory dataSourceFactory) {this.dataSourceFactory dataSourceFactory;}}3.2. Setter方法注入Setter Injection 通过Setter方法设置依赖项。这种方式允许使用默认构造函数创建类的实例然后通过Setter方法来动态设置依赖项。示例代码如下 Component public class SLFBClient {private DataSourceFactory dataSourceFactory;/*** Autowired 从spring4.3开始可以省略*/ // Autowiredpublic void setDataSourceFactory(DataSourceFactory dataSourceFactory) {this.dataSourceFactory dataSourceFactory;} }3.3. 字段注入Field Injection 通过直接将依赖项注入到类的字段上。这种方式最简洁但也最不推荐使用在之前的回答中已经详细解释了原因。示例代码如下 Component public class SLFBClient {// Autowired // ResourceInjectprivate DataSourceFactory dataSourceFactory;}Autowired、Resource和Inject是用于依赖注入的常见注解它们在使用方式和一些细节上有一些区别。 Autowired 来自Spring框架。默认按照类型byType进行依赖注入会尝试将匹配的bean自动注入到目标字段、构造函数或方法参数中。可以与Qualifier一起使用通过指定bean的名称或限定符来进一步指定要注入的bean。Autowired是非强制性的可以在某些情况下将依赖项标记为可选。 Resource 是Java EE的标准注解也可以被Spring框架支持。默认按照名称byName进行依赖注入通过指定bean的名称来解析并注入匹配的bean。可以使用name属性指定要注入的bean的名称。Resource是强制性的要求找到匹配的bean进行注入否则会抛出异常。 Inject 是Java CDIContexts and Dependency Injection规范的一部分可以由Java EE和一些其他框架如Spring支持。默认按照类型byType进行依赖注入使用与Autowired类似的机制。不支持required属性即所有注入都被视为必需的。可以与Qualifier一起使用通过指定bean的名称或限定符来进一步指定要注入的bean。 总结 Autowired是Spring特有的注解默认按类型进行依赖注入。Resource是Java EE的标准注解可被Spring支持默认按名称进行依赖注入。Inject是Java CDI规范的注解也可被Spring等框架支持默认按类型进行依赖注入。三个注解都可以与Qualifier一起使用来指定具体要注入的bean。Autowired和Inject在功能上相似而Resource功能稍有不同但它们通常可以互相替代使用。 需要注意的是具体在Spring中使用哪个注解可以根据项目的需求、框架的支持以及个人偏好来决定。 4. 推荐方案 使用构造器注入的好处 保证依赖不可变final关键字保证依赖不为空省去了我们对其检查保证返回客户端调用的代码的时候是完全初始化的状态避免了循环依赖提升了代码的可复用性 推荐使用Lombok中的RequiredArgsConstructor注解 Component RequiredArgsConstructor public class SLFBClient {private final DataSourceFactory dataSourceFactory;}接下来我们探讨一下Lombok的NoArgsConstructor, RequiredArgsConstructor, AllArgsContructor三个注解 NoArgsConstructor 自动生成一个无参构造函数。适用于不需要传入参数的情况。 import lombok.NoArgsConstructor;NoArgsConstructor public class MyClass {// Fields and methods }2. RequiredArgsConstructor 自动生成一个包含所有被标记为final和NonNull的字段的构造函数。适用于只关注部分字段并确保这些字段非空的情况。 import lombok.NonNull; import lombok.RequiredArgsConstructor;RequiredArgsConstructor public class MyClass {private final String name;NonNullprivate final Integer age;// Other fields and methods }AllArgsConstructor 自动生成一个包含所有类字段的构造函数。适用于需要一次性传递所有字段值的情况。 import lombok.AllArgsConstructor;AllArgsConstructor public class MyClass {private String name;private int age;// Other fields and methods }5. 参考博客 Field Dependency Injection Considered Harmful Field injection is not recommendedSpring团队不推荐使用Field注入 【Spring】浅谈spring为什么推荐使用构造器注入
http://www.huolong8.cn/news/243935/

相关文章:

  • 网站描述怎么修改吗律师网站建设推广
  • gooood谷德设计网站做网站定制
  • 做哪些网站流量大wordpress无法编辑文章
  • 网站带后台ssp网站怎么做
  • 网站页面架构怎么写wordpress 插件 code
  • 手机网站字体大小规范wordpress 重写 函数
  • wordpress无域名建站手机网页显示不全
  • 济宁市城市建设投资中心网站深圳网站建设企
  • 企业营销型网站建设图片滨州市住房和城乡建设厅网站
  • 优惠网站代理怎么做黄石网站制作公司
  • wordpress站点打不开wordpress本地优化加速版
  • 建网站培训学校企业邮箱电话人工服务24小时
  • 网站报错 500焦作seo公司
  • c做的网站外包活加工官方网站
  • 有趣网站之家优化推广服务
  • asp.net商务网站 包括哪些文件新闻营销的优势
  • 网站做三屏合一做网站的研究生专业
  • 怎么才能建立一个网站怎么在网上接网站开发的工作
  • 博物馆网站建设目的营销型网站如何建设
  • 主流做网站程序代码什么企业适合做网站
  • 济南网站建设代码模板建站哪家好
  • 网站 固定ip微信营销课
  • 东莞市建设安监局网站首页ps怎么做网站横幅广告
  • 怎么给网站添加关键词python游戏开发
  • 域名不变修改网站怎么做洛阳网站开发公司
  • 什么是网站二级目录wordpress所有栏目循环输出
  • 有什么好用的模拟建站软件大连最新发布
  • WordPress发送邮件按钮开鲁网站seo免费版
  • 表白网站制作平台如何在百度搜到自己的网站
  • 凡科建站网哪里有网站制作服务