美文网首页
关于@Autowire和@Resource注解的理解

关于@Autowire和@Resource注解的理解

作者: 我就要取名叫夏末 | 来源:发表于2018-07-06 11:39 被阅读0次

    开发中面临的问题:
    一般的java或者面向对象思想的程序的架构,大量使用了“组合”这一实现方式,也就是在一个对象内部持有了别的对象的引用,来实现多个对象的交互。这些引用一般由程序员控制。
    但是这样,会出现明显的问题:代码耦合度过大,可能修改了一个类中的方法,持有这个对象的所有地方的代码都需要修改,不便于维护。


    没有IOC的情况下就必须单独创建需要的每个对象.png

    Spring的IOC和DI

    IOC:控制反转(Inversion of control),是面向对象编程中的一种设计原则,是一种解耦的思想,可以用来减低计算机代码之间的耦合度。
    简单来说就是 ”控制权的转移” 。
    若我们new一个实例,该实例的控制权在我们程序员手上,而控制反转指new实例工作交由spring的IOC容器来完成,不经由程序员,因而控制权在spring容器,我们使用时,仅仅只是调用这个实例。
    IOC的一个重点就是,在系统运行中,动态地向某个对象提供它需要的其他对象。这一点即是通过依赖注入(DI)来实现的。spring是通过反射来实现注入的。

    DI:依赖注入(dependency injection),依赖就是指一种关系,如果在 “类A” 中创建了 “类B” 的实例,我们说 “类A” 依赖 “类B”。依赖类不由程序员实例化,而是通过spring容器帮我们new指定的实例,并将实例注入到需要该对象的类中去.

    DI是IOC的另一种表述方式。

    依赖注入.png

    SpringBoot的三层架构:controller、service、dao,设计思想是高内聚,低耦合。高内聚是指特定的类或者功能,放在同一个位置,主要依靠调用其他层级的方法得以实现低耦合的思想,所以IOC和DI是非常常见而且常用的。

    @Autowire相当于由spring负责依赖注入,而你的new是直接new一个对象。

    Spring提供了五种自动装配的类型
    ①no:显示指明不使用Spring的自动装配功能
    ②byName:根据属性和组件的名称匹配关系来实现bean的自动装配
    ③byType:根据属性和组件的类型匹配关系来实现bean的自动装配,有多个适合类型的对象时装配失败
    ④constructor:与byType类似是根据类型自动装配,但是要求待装配的bean有相应的构造函数
    ⑤autodetect:利用Spring的自省机制判断使用byType或是constructor装配

    使用XML方式进行装配

    使用注解的方式进行装配

    Spring通过@Resource注解和@Autowire实现自动装配

    @Resource 根据byName进行装配
    @Autowire通过byType进行装配

    @autowire跟XML方式注入类似,是Ioc容器负责创建新的实例,实例里可以有其他的依赖关系并也由springIoc容器负责注入,如果只是简单的new一个对象的话,新对象里面的所有变量依赖都是没有注入的,这样就失去了Ioc的意义。

    感谢:
    https://blog.csdn.net/HaoDaWang/article/details/76575667
    https://blog.csdn.net/qq_34581118/article/details/80610730

    相关文章

      网友评论

          本文标题:关于@Autowire和@Resource注解的理解

          本文链接:https://www.haomeiwen.com/subject/ltmvuftx.html