Spring容器管理对象和new对象
问题:一个业务类交给spring管理,并自动注入了其他业务类作为属性,方法中通过全局属性调用其他业务类的方法。当该业务类是通过new获取的情况下,该实例的属性会是null(不存在依赖注入实例),调用方法就会报空指针。
为保证该方法无论是被new出来的对象调用还是被spring容器对象引用都能正常使用,方法中就要 使用spring管理的类 。
- 获取spring管理的对象:
- WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
- Object obj=wac.getBean(beanID);
- spring的IOC和DI理解:
控制反转:对象实例在spring启动后都会被创建,只需要从容器中获取就可以使用。可以通过xml配置bean的方法获取,也可以通过注解扫描的方法创建。@Component
依赖注入:字面意思指的是类的属性实例化过程。在获取到被spring管理的对象时,该对象的属性如果在spring容器也存在实例,那么可以直接从spring获取(注入),
也就是该类的属性依赖于对象本身的实例化而实例化。如果对象不是从容器获取,那么它的属性也不会从容器实例化。可以通过xml配置注入,也可以通过在可扫描类下加@Autowired依赖注入。
- DI:
- 不管是面向对象, 还是面向过程, 都需要分成许多的块, 然后由这些部件协同工作完成任务
- 要协同工作就会产生依赖, 一个方法调用另一个方法, 一个对象包含另一个对象
- 如果对象 A 包含对象 B 的话, 就需要在 A 里 new 一个 B
- 依赖注入从具体类 B 里抽象出接口 IB——IB 的具体实现可能有很多 B,B1,B2...很多种——
- 这样 A 可以不用再 new 具体的 B 了, 而是跟 IoC 容器说: 我要一个 IB(getBean("IB")) 。
- 然后, 由容器根据配置文件来做具体的 new 的工作。 具体 new 的是哪个, 由配置文件从代
- 码外部决定, 要更换成 B,B1,或是 B2...修改配置文件就能做到, 不用再改代码了
- 总结:new对象与spring管理的对象没有关联。new对象并没有spring参与管理,它的属性不存在依赖注入,它的属性要手动实例化。spring管理的对象与它的属性(被注入的属性)存在依赖关系;
Spring容器管理对象和new对象的更多相关文章
- 面试官:就问个Spring容器初始化和Bean对象的创建,你讲一小时了
前言 spring作为一个容器,可以管理对象的生命周期.对象与对象之间的依赖关系.可以通过配置文件,来定义对象,以及设置其与其他对象的依赖关系. main测试类 public static void ...
- 普通类中获取spring容器中的javabean对象
spring提供了一系列的*Aware 接口,用于获取相应的对象,进行一系列的对象设置操作,此处实现ApplicationContextAware来获取ApplicationContext. 其他Aw ...
- java 从spring容器中获取注入的bean对象
java 从spring容器中获取注入的bean对象 CreateTime--2018年6月1日10点22分 Author:Marydon 1.使用场景 控制层调用业务层时,控制层需要拿到业务层在 ...
- 2.spring源码-BeanPostProcessor后置处理之ApplicationContextAwareProcessor,实现spring容器中某一个类的bean对象在初始化时需要得到Spring容器内容。
需求:我们的需求是,在spring初始化完毕时,使我们自定义一个类Bird类可以得到spring容器内容. 实现步骤: 1.首先我们来看一下ApplicationContextAwareProcess ...
- Spring是什么、spring容器、Spring三大核心思想DI(依赖注入)、IOC(控制反转)、AOP(面向切面编程)
1.Spring (1)Spring是什么? 是一个轻量级的.用来简化企业级应用开发的开发框架. 注: a.简化开发: Spring对常用的api做了简化,比如,使用Spring jdbc来访问数据库 ...
- Unit01: Spring简介 、 Spring容器 、 Spring IOC
Unit01: Spring简介 . Spring容器 . Spring IOC Spring (1)Spring是什么? Spring是一个开源的用来简化应用开发的框架. (2)Spring的特点? ...
- 通过单元测试理解spring容器以及dubbo+zookeeper单元测试异常处理
一.先说一个结论:单元测试与主项目的spring容器是隔离的,也就是说,单元测试无法访问主项目spring容器,需要自己加载spring容器. 接下来是代码实例,WEB主项目出于运行状态,单元测试中可 ...
- ServletContext与Web应用以及Spring容器启动
一.ServletContext对象获取Demo Servlet容器在启动时会加载Web应用,并为每个Web应用创建唯一的ServletContext对象. 可以把ServletContext看作一个 ...
- Spring管理Filter和Servlet(在servlet中注入spring容器中的bean)
在使用spring容器的web应用中,业务对象间的依赖关系都可以用context.xml文件来配置,并且由spring容器来负责依赖对象 的创建.如果要在servlet中使用spring容器管理业务对 ...
随机推荐
- 八 Connect API 连接器
Connect API: 实现一个连接器(connector),不断地从一些数据源系统拉取数据到kafka,或从kafka推送到宿系统(sink system). 大多数Connect使用者不需要直接 ...
- Python实现SSH传输文件(sftp)
Windows通过ssh给Linux发送文件 #-*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import paramiko t ...
- Python中常见的异常处理
异常和错误 part1:程序中难免出现错误,而错误分成两种 1. 语法错误(这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正) # 语法错误示范一 if # 语法错误示范二 d ...
- Checker Challenge跳棋的挑战(n皇后问题)
Description 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行,每列,每条对角线(包括两条主对角线的所有对角线)上都至多有一个棋子. 列号 0 1 2 3 4 5 6 ...
- 接口测试中如何利用cookies保持会话
使用cookies保持会话自己研究了下应该有两种方式: 1.保持会话的第一种方法:如果用的是同一个HttpClient且没去手动连接放掉client.getConnectionManager().sh ...
- 斐波那契数列,跳台阶(dp思想)
一 . 斐波那契数列:1,1,2,3,5,8,13,21 即后一项是前两项的和. class Solution { private: ]; public: Solution() { memset(ar ...
- 安装express.js(NODEJS框架)
express.js是nodejs的一个MVC开发框架,并且支持jade等多种模板.下面简单来说说express的安装和app.js文件的配置,然后在今后的教程中一步一步使用express.js搭建个 ...
- js(jquery)右键菜单插件的实现
今天开发一个项目的时候需要一个模拟鼠标右键菜单的功能.也就是在网页点击鼠标右键的时候不是弹出系统的菜单而是我们制定的内容.这样可以拓展右键的功能.实现过程不多说了,写出来的代码和效果如下: js部分: ...
- SpringBoot18 Swagger、API接口文档生成、WireMock、模拟后台数据
1 Swagger 1.1 简述 前后端分离的项目需要前后端开发人员协同工作,后台开发人员需要给到前端开发者一套API文档:利用Swagger可以简单高效的帮助后台开发者生成RestfulAPI开发文 ...
- Linux中IO监控命令的使用分析
一篇不错的有关linux io监控命令的介绍和使用. 1.系统级IO监控 iostat iostat -xdm 1 # 个人习惯 %util 代表磁盘繁忙程度.100% 表示磁盘 ...