2019独角兽企业重金招聘Python工程师标准>>>

大家经常用到Spring IOC去管理对象之间的依赖关系,但一般情况下都有一个前提:这些Bean对象必须是通过Spring容器创建实例化的。

但实际上,项目中有可能会遇到这样的场景:

一个类不是通过Spring容器实例化的,而是直接new Object()这种方式创建,这个对象又和别的Spring容器中管理的对象存在依赖关系。

这时该怎么办呢,当然,我们可以手动的去调用setXxxx()方法去设置对象之间的依赖,但这样耦合性又太高。还好Spring也提供了注入非Spring Bean对象的功能。

以下是《SPring in Action》中的Demo:

package com.springinaction.springidol;  import org.springframework.beans.factory.annotation.Configurable;  @Configurable("pianist")
public class Instrumentalist implements Performer {  public Instrumentalist() {}  public void perform() throws PerformanceException {  System.out.print("Playing " + song + " : ");  instrument.play();  }  private String song;  public void setSong(String song) {  this.song = song;  }  private Instrument instrument;  public void setInstrument(Instrument instrument) {  this.instrument = instrument;  }
}

其中,@Configurable("pianist")作用有两个:

1.它表示当前类对象是在Spring容器外实例化的,但仍可以由Spring容器进行配置管理;

2.它把Instrumentalist类与id为"pianist"的Bean关联起来了,以后当Spring企图配置Instrumentalist实例时,会以pianist Bean为模板。

<?xml version="1.0" encoding="UTF-8"?>  <beans xmlns="http://www.springframework.org/schema/beans"  xmlns:aop="http://www.springframework.org/schema/aop"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  http://www.springframework.org/schema/aop   http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">  <aop:spring-configured/>  <bean id="pianist"   class="com.springinaction.springidol.Instrumentalist"  abstract="true">  <property name="song" value="Chopsticks" />  <property name="instrument">  <bean class="com.springinaction.springidol.Piano" />  </property>  </bean>
</beans>

其中,<aop:spring-configured/>的作用是:告诉Spring有一些Bean需要进行配置,包括在Spring容器外创建的Bean对象。

转载于:https://my.oschina.net/u/1866821/blog/364381

【Spring实战】注入非Spring Bean对象相关推荐

  1. Spring源码阅读之bean对象的创建过程

    Spring源码阅读之bean对象的创建过程 ​ Spring是通过IOC容器来管理对象的,该容器不仅仅只是帮我们创建了对象那么简单,它负责了对象的整个生命周期-创建.装配.销毁.这种方式成为控制反转 ...

  2. Spring实战6-利用Spring和JDBC访问数据库

    主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRep ...

  3. Spring实战 | 第一部分 Spring的核心(第一章 Spring之旅)

    Spring的bean容器 介绍Spring的核心模块 更为强大的Spring生态系统 Spring的新功能 一.简化java开发 为了降低Spring开发的复杂性,Spring采取了以下4钟关键策略 ...

  4. Spring里的容器和Bean对象

    "控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做.在Spring中BeanFactory是IOC容器的实际代表者. Spring 容器是 Spring 框架 ...

  5. Spring源码解析-实例化bean对象

    spring加载配置文件,AbstractApplicationContext类中的refresh方法起着重要的作用. @Overridepublic void refresh() throws Be ...

  6. 《Spring实战》系列之Bean的装配-Days01

    1 自动化装配bean Spring通过两个方面实现对bean的自动装配 1 ) 组件扫描(component scaning):Spring会自动发现Spring上下文中的bean 2 ) 自动装配 ...

  7. Spring动态注入泛型集合Bean

    为什么80%的码农都做不了架构师?>>>    我们在使用Spring框架的时候,常常需要注入相关的Bean,如果需要注入有相同类型的Bean的时候,会比较麻烦,需要一个一个注入,并 ...

  8. Spring实战 | 第一部分 Spring的核心(第四章 面向切面的Spring)

    第四章 面向切面编程 面向切面编程的基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 AspectJ是一个面向切面的框架,它扩展了java语言.AspectJ定义 ...

  9. Spring实战1:Spring初探

    现在的Java程序员赶上了好时候.在将近20年的历史中,Java的发展历经沉浮.尽管有很多为人诟病的产品,例如applets.EJB.Java Data Object(JDO)和数不清的日志框架,Ja ...

最新文章

  1. 【组队学习】【35期】李宏毅机器学习(含深度学习)
  2. 图神经网络(AliGraph)在阿里巴巴的发展与应用
  3. @RequestMapping中method的默认值是什么?
  4. 同一台电脑上使用两个 github 账号
  5. 【学习笔记】SAP FI 业务范围的概念
  6. JavaScript入门(part12)--内置对象
  7. vtkBorderWidget设置窗口位置的问题
  8. js 数组遍历符合条件跳出循环体_C++模拟面试:从数组“紧凑”操作说开来
  9. 风靡全球的15则数学动图:让你秒懂数学概念,看后觉得相见恨晚啊
  10. 计算机组成原理平均cpi怎么算_2020考研 | 计算机统考408院校盘点,408考试内容难易分析...
  11. (23)HTTP 状态消息
  12. 最大功率点跟踪_华北电力大学颜湘武团队特稿:基于变功率点跟踪和超级电容器储能协调控制的双馈风电机组一次调频策略...
  13. https 方式使用git@osc设置密码的方式
  14. Codeforces Round #666 (Div. 2)B. Power Sequence(等比数列)
  15. 中小企业什么OA办公系统适用呢?
  16. linux 锐捷客户端 脚本,常熟理工学院锐捷客户端 for Linux
  17. spss 因子分析非正定矩阵解决方案
  18. C11 多线程初学1
  19. IT成长中的龟兔赛跑
  20. 2020版影视制作学习路线图(含大纲+视频+工具+书籍+面试)

热门文章

  1. React Native组件开发指南
  2. JUC——线程同步锁(ReentrantLock)
  3. CTO关注:升级Win 10,除了更安全还有什么
  4. 图解RxJava2(一)
  5. SharePoint 2013 搭建负载均衡(NLB)
  6. MySQL数据库备份和还原的常用命令小结
  7. suse软件管理程序zypper
  8. OpenCV 获取并修改图中的像素点
  9. idea 2018.2.2安装
  10. How to expand Azure VM OS Disk