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

Spring 注入、注解及相关概念补充

一、Spring DI 的理解

        DI ( Dependency Inject,中文释义:依赖注入)是对 IOC 概念不同角度的描述,是指应用程序在运行时,每一个 bean 对象依赖 IOC 容器注入当前 bean 对象所需要的另一个 bean 对象。(例如:在 Mybatis 整合 Spring 时,SqlSessionFactoryBean 依赖 IOC 容器注入一个 DataSource 数据源 Bean )

二、Spring 的 Bean 是什么?

        简单来说,Bean 代表被 IOC 容器管理的对象;我们通过配置文件或注解,告诉 IOC 容器帮助我们管理哪些对象。

<bean id="..." class="..."><constructor-arg value="...">
</bean>

三、Spring 框架中的常见注入方法有几种?

        Spring IOC 的常见注入方法有3种:Setter注入、构造注入属性注入

(1)Setter注入

        使用 Setter 方法 注入 Bean 

(2)构造注入

        使用 构造方法 注入 Bean

(3)属性注入

        使用 成员属性 注入 Bean,不推荐。原因:使用私有的成员属性变量,依靠反射实现,破坏封装,只能依靠 IOC 容器实现注入,不严谨。

四、Spring 中常见的 ApplicationContext 实现类有哪些?

(一)ClassPathXmlApplicationContext

                根据类路径 classpath 下的配置文件加载 bean

(二)FileSystemXmlApplicationContext

                根据当前磁盘的一个绝对路径下的配置文件加载 bean

(三)AnnotationConfigApplicationContext

                根据读取到的注解加载 bean

(四)WebApplicationContext

                web 容器下按照配置文件加载 bean

五、Spring 框架注解有哪些?

用于声明 Bean 的注解:
@Component定义通用 Bean 的注解,可标注任意类为 Bean,若一个 Bean 不知道属于哪一层,可使用该注解标注
@Repository定义数据访问层 Bean 的注解
@Service定义业务层 Bean 的注解
@Controller定义控制层 Bean 的注解

用于注入的注解:

@Autowired按类型自动注入
@Qualifier按名称自动注入

声明配置、扫描、启动特性的注解: 

@Configuration声明配置类
@ComponentScan组件扫描
@EnableScheduling启动任务调度
@EnableAspectJAutoProxy启动自动代理工厂

六、@Component 和 @Bean 的区别?

@Component@Bean
注解作用于方法
方式通常通过类路径扫描来实现自动扫描并完成装配 Bean 到 Spring IOC 容器中通常用于注解某个方法,通过 @Bean 注解告诉了Spring IOC 容器,该方法的返回值实例是一个 Bean 

七、@Autowired 和 @Resource 的区别是什么?

@Autowired@Resource
提供方Spring 提供的注解JDK 提供的注解
默认注入方式byType(按类型自动注入)byName(按名称自动注入)

 八、BeanFactory 和 ApplicationContext 区别?

两者之间的关系:

        BeanFactory 和 ApplicationContext 是 Spring 的两大核心接口,都可以当作 Spring 的容器。

两者区别与不同:

        BeanFactory 是 Spring 里面最底层的接口,是 IOC 的核心,定义了 IOC 的基本功能,包含了各种 Bean 的定义、加载、实例化、依赖注入生命周期管理等行为。

        ApplicationContext 接口作为 BeanFactory 接口的子接口,包含 BeanFactory 所具备的功能外,还提供了其它框架功能:继承 MessageSource(支持国际化)、资源文件访问、可以同时加载多个配置文件、可以通过监听器管理 Bean 的生命周期。

Bean 的创建加载方式:

        BeanFactory 采用的是延迟加载形式来注入 Bean ,只有在使用到某个 Bean 时,才会对该 Bean 进行加载实例化。这样不能提前发现一些存在的 Spring 的配置问题。若 Bean 的某一个属性没有注入, BeanFactory 加载后,直至第一次使用调用 getBean() 方法才会抛出异常

        ApplicationContext 是在容器启动时,一次性创建了所有的 Bean。这样,在容器启动时,我们就可以发现 Spring 中存在的配置错误,这样有利于检查所依赖属性是否注入。ApplicationContext 启动后预载入所有的单实例 Bean ,所以在运行时速度比较快,因为它们已经创建好了。相对于 BeabFactory ,ApplicationContext 唯一的不足是占用内存空间,当应用程序配置 Bean 较多时,程序启动较慢

http://www.lryc.cn/news/428539.html

相关文章:

  • 【Linux多线程】线程安全的单例模式
  • 基于jqury和canvas画板技术五子棋游戏设计与实现(论文+源码)_kaic
  • 指针 (四)
  • 便利店(超市)管理系统设计与实现(源码+lw+部署文档+讲解等)
  • Excel中的“块”操作
  • yolo V8训练 长条状目标
  • 数据结构与算法 - 设计
  • 62 网络设备的暗藏的操控者SNMP
  • 华硕飞行堡垒键盘全部失灵【除电源键】
  • 前端字符串将其分割成长度为 32 的子字符串数组
  • 小学二年级数学精选试题
  • 练习题 - 探索正则表达式re功能
  • 【Oracle 11G 配置使用教程1】
  • 【ubuntu24.04】docker pull 配置
  • 《机器学习》—— 通过下采样方法实现银行贷款分类问题
  • Synchronized重量级锁原理和实战(五)
  • linux常用网络工具汇总三
  • Linux中nano编辑器详解
  • 26-vector arraylist和linkedlist的区别
  • 20-redis穿透击穿雪崩
  • Docker使用教程
  • poi-tl循环放图片+文字说明
  • 数据结构之树的存储结构
  • Zotero 常用插件介绍
  • WebSocket协议解析
  • ES6 (一)——ES6 简介及环境搭建
  • HarmonyOS开发案例:列表场景实例-TaskPool
  • 谷歌浏览器如何隐藏书签
  • SQL - 视图
  • centos7环境升级默认的gcc 4.8.5到gcc 8.2.0, 并且升级glibc到glibc 2.28