问题:一个业务类交给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管理的对象与它的属性(被注入的属性)存在依赖关系;

最新文章

  1. js获取Html元素的实际宽度高度
  2. Java准确地获取本地IP地址
  3. Spring应用教程-2 方法注入
  4. 正向代理与反向代理的区别【Nginx读书笔记】(zz)
  5. Sass和Compass设计师指南
  6. Ubuntu中useradd和adduser的区别
  7. FM笔记
  8. 利用sfntly的sfnttool.jar提取中文字体
  9. 细说php(六) 数组
  10. javascript sort排序
  11. 冒泡排序算法 C++和PHP达到
  12. Redis 的性能
  13. python的web开发环境Django配置
  14. Unlocker(强力删除文件工具) 1.9.2 汉化绿色版
  15. iframe访问子页面方法
  16. 开源纯C#工控网关+组态软件(十)移植到.NET Core
  17. mac下安装windows系统
  18. Windows 2008 R2 域控制器迁移至windows 2016记录
  19. 无需sendmail:巧用LD_PRELOAD突破disable_functions
  20. 可以落地的DDD到底长什么样?

热门文章

  1. python学习(七) 更加抽象
  2. Python Twisted系列教程14:Deferred用于同步环境
  3. Centos安装php高版本
  4. GET、POST详解 --转自http://hi.baidu.com/richarwu/item/bd43633a6ba62986b611dbcd
  5. JAVA简单的文件I/O操作实例
  6. Elasticsearch之kopf插件安装之后的浏览详解
  7. Tornado中insert into sql语句的构造
  8. ubuntu 12.04 ubuntu System program problem detected 解决方法
  9. datatables01 安装、数据源、选中行事件、新增一行数据、删除一行数据
  10. TOP命令 详解CPU 查看多个核心的利用率按1