Spring-1

目录

概念

优点

Autowired和Resource关键字

相同点

不同点

依赖注入的三种方式


概念

Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE(Java平台企业版)平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。

优点

  1. 轻量:Spring 是轻量的,基本的版本大约2MB。
  2. 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
  3. 面向切面的编程(AOP)Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
  4. 容器:Spring 包含并管理应用中对象的生命周期和配置。
  5. MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。

经典MVC模式中,M是指模型,V是视图,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。

  1. 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
  2. 异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。

Autowired和Resource关键字

相同点

  1. @Resource和@Autowired都是做bean的注入时使用。
  2. 两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

不同点

  1. @Resource并不是Spring的注解,需要导入包 javax.annotation.Resource,但是Spring支持该注解的注入,@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired
  2. @Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。
  3. @Resource默认按照ByName自动注入,由J2EE提供,@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为 bean 的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

依赖注入的三种方式

构造器注入:将被依赖对象通过构造函数的参数注入给依赖对象,并且在初始化对象的时候注入。

优点: 对象初始化完成后便可获得可使用的对象。

缺点: 当需要注入的对象很多时,构造器参数列表将会很长,不够灵活。若有多种注入方式,每种

方式只需注入指定几个依赖,那么就需要提供多个重载的构造函数,麻烦。

setter方法注入: IOC Service Provider通过调用成员变量提供的setter函数将被依赖对象注入给依赖类。

优点: 灵活,可以选择性地注入需要的对象。

缺点: 依赖对象初始化完成后由于尚未注入被依赖对象,因此还不能使用。

接口注入:依赖类必须要实现指定的接口,然后实现该接口中的一个函数,该函数就是用于依赖注入。该函数的参数就是要注入的对象。

优点:接口注入中,接口的名字、函数的名字都不重要,只要保证函数的参数是要注入的对象类型即可。

缺点: 侵入性太强,不建议使用。

侵入性:如果类A要使用别人提供的一个功能,若为了使用这功能,需要在自己的类中增加额外的代码,这就是侵入性

近日总结:看人要擦亮眼睛

相关推荐

  1. <span style='color:red;'>Spring</span>-<span style='color:red;'>1</span>

    Spring-1

    2024-03-16 00:56:02      42 阅读
  2. 1Spring CLI 简介

    2024-03-16 00:56:02       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-16 00:56:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-16 00:56:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-16 00:56:02       87 阅读
  4. Python语言-面向对象

    2024-03-16 00:56:02       96 阅读

热门阅读

  1. 2024年3月质量管理体系基础考试真题

    2024-03-16 00:56:02       42 阅读
  2. 【C++】每日一题 101 对称二叉树

    2024-03-16 00:56:02       40 阅读
  3. 【数组】-Lc53-最大子序和(动态规划)

    2024-03-16 00:56:02       46 阅读
  4. 人工智能迷惑行为大赏

    2024-03-16 00:56:02       35 阅读
  5. Spring MVC BeanNameViewResolver原理解析

    2024-03-16 00:56:02       39 阅读
  6. Python 机器学习入门:数据集、数据类型和统计学

    2024-03-16 00:56:02       42 阅读
  7. L3自动驾驶的“双保险”:冗余EPS关键技术解析

    2024-03-16 00:56:02       42 阅读
  8. git for windows

    2024-03-16 00:56:02       45 阅读
  9. 单个数据盘分区如何配置LVM

    2024-03-16 00:56:02       47 阅读
  10. Hive中的explode函数、posexplode函数与later view函数

    2024-03-16 00:56:02       38 阅读
  11. 专升本 C语言笔记-02 标识符 命名规范 关键字

    2024-03-16 00:56:02       44 阅读
  12. Rust 的 HashMap

    2024-03-16 00:56:02       43 阅读