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

app 网站淘宝客做网站要钱吗

app 网站,淘宝客做网站要钱吗,海南发展,网站开发自学网站文章目录 1. 引言2. 不推荐使用Autowired的原因3. Spring提供了三种主要的依赖注入方式3.1. 构造函数注入(Constructor Injection)3.2. Setter方法注入(Setter Injection)3.3. 字段注入(Field Injection) 4…

文章目录

  • 1. 引言
  • 2. 不推荐使用@Autowired的原因
  • 3. Spring提供了三种主要的依赖注入方式
    • 3.1. 构造函数注入(Constructor Injection)
    • 3.2. Setter方法注入(Setter Injection)
    • 3.3. 字段注入(Field Injection)
  • 4. 推荐方案
  • 5. 参考博客

1. 引言

Field injection is not recommended

意思就是不推荐使用字段注入的方式,不是不推荐@Autowired注解,以前为了简便就直接使用
@Resource代替,程序员都在不断追求完美。。。 接下来我们实实在在的分析一下为啥不推荐,以及到底推荐那种方式注入。

2. 不推荐使用@Autowired的原因

不推荐使用@Autowired进行字段注入的原因有以下几点:

  1. 紧耦合性(Tight Coupling):字段注入将依赖关系直接注入到类的字段上,导致类与依赖之间产生紧密的耦合。这使得代码难以修改和扩展,并且增加了对具体实现的依赖性。

  2. 隐藏依赖关系(Hidden Dependencies):字段注入隐藏了类的依赖关系,使代码不够透明和可读。读取代码时无法立即知道类所依赖的其他组件或服务。

  3. 单元测试困难(Difficult Unit Testing):由于字段注入需要依赖容器来自动注入依赖项,导致在编写单元测试时必须依赖完整的容器环境。这增加了测试的复杂性,并且可能会导致测试变慢或不稳定。

  4. 难以发现依赖问题(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
//    @Resource@Injectprivate DataSourceFactory dataSourceFactory;}

@Autowired、@Resource和@Inject是用于依赖注入的常见注解,它们在使用方式和一些细节上有一些区别。

  1. @Autowired:

    • 来自Spring框架。
    • 默认按照类型(byType)进行依赖注入,会尝试将匹配的bean自动注入到目标字段、构造函数或方法参数中。
    • 可以与@Qualifier一起使用,通过指定bean的名称或限定符来进一步指定要注入的bean。
    • @Autowired是非强制性的,可以在某些情况下将依赖项标记为可选。
  2. @Resource:

    • Java EE的标准注解,也可以被Spring框架支持。
    • 默认按照名称(byName)进行依赖注入,通过指定bean的名称来解析并注入匹配的bean
    • 可以使用name属性指定要注入的bean的名称。
    • @Resource是强制性的,要求找到匹配的bean进行注入,否则会抛出异常。
  3. @Inject:

    • Java CDI(Contexts and Dependency Injection)规范的一部分,可以由Java EE和一些其他框架(如Spring)支持。
    • 默认按照类型(byType)进行依赖注入,使用与@Autowired类似的机制。
    • 不支持required属性,即所有注入都被视为必需的。
    • 可以与@Qualifier一起使用,通过指定bean的名称或限定符来进一步指定要注入的bean

总结:

  • @AutowiredSpring特有的注解,默认按类型进行依赖注入。
  • @ResourceJava EE的标准注解,可被Spring支持,默认按名称进行依赖注入。
  • @InjectJava 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三个注解

  1. @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
}
  1. @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 recommended(Spring团队不推荐使用Field注入)

【Spring】浅谈spring为什么推荐使用构造器注入

http://www.yayakq.cn/news/239456/

相关文章:

  • 怎样用8uftp做网站网站如何悬挂备案号
  • 手机小游戏网站网站备案未注销 影响
  • 人才招聘网站开发背景南山做网站公司怎么选择
  • 上海十大网站建福州seo公司排名
  • 网站建设需要用到的软件公司装修合同范本
  • 保定市制作网站公司建个公司网站需要多少钱
  • 西安建设工程交易网站wordpress无法自动更新
  • idc销售网站php源代码域名信息查询
  • 嘉兴网站制作费用医疗营销网站建设方案
  • 无锡企业免费建站网站开发设计大赛
  • 织梦汽车网站模板免费下载wordpress 调用分类目录描述
  • 一个网站需要怎么做适合大学生做的网站有哪些
  • wordpress搭建商城网站网站群建设代理
  • 公司网站开发需求文档网站开发需要客户做什么
  • 网站建设公司优惠中微信客户端网站建设
  • 网站未备案做经营被罚款旅游小程序哪家做得好
  • 软件开发培训温州seo关键词
  • 福田做网站的wordpress 赞赏
  • 杨凌企业网站开发公司网站模板免费下载
  • 微信网站建设企业wordpress 330
  • 什么是网站二级目录目前做系统比较好的网站
  • 网站服务器ipv6国内公司网站需要备案吗
  • 租赁网站空间更换怎么做网页美工设计教案网页元素设计
  • 网站建站建设价格禁用wordpress默认编辑器
  • 域名注册网站免费有什么可以做兼职的网站
  • 灰色行业推广排名优化公司哪家好
  • 建设部网站公示公告安全用wordpress建立的网站
  • 绵阳的网站建设公司哪家好Django可以做门户网站吗
  • 网站keywords多少字wordpress标签页固定连接以.html后缀结尾
  • 建设网站 后期的提成方案一般通过微信号添加的微信好友