【Spring实战】注入非Spring Bean对象

大家经常用到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对象。

时间: 2024-12-25 13:15:55

【Spring实战】注入非Spring Bean对象的相关文章

&lt;Spring实战&gt;2:装配Bean

1 声明Bean 1.1 创建 Spring 配置 Spring 容器提供两种配置 Bean 的方式:xml 配置和基于注解配置. Spring 配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/

spring如何注入List,Set,Map对象

原文:spring如何注入List,Set,Map对象 代码下载地址:http://www.zuidaima.com/share/1550463255530496.htm 想把java的List,Set,Map对象通过xml方式注入到对象中如何实现呢? 标签: ioc spring 注入 List Set Map话题: Web开发 依赖注入IoC spring如何注入List,Set,Map对象,布布扣,bubuko.com

Spring实战3:装配bean的进阶知识

主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expression Language 在装配bean—依赖注入的本质一文中,我们探讨了Spring的三种管理bean的方式:自动装配.基于JavaConfig.基于XML文件.这篇文字将探讨一些Spring中关于bean的管理的高级知识,这些技能你可能不会每天都用,但是非常重要. 3.1 Environments

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

1 自动化装配bean Spring通过两个方面实现对bean的自动装配 1 ) 组件扫描(component scaning):Spring会自动发现Spring上下文中的bean 2 ) 自动装配(autowriting):Spring自动满足bean之间的依赖 1.1 创建可被发现的bean 现在我们创建一个接口: public interface CompactDisc { void play(); } 接着来一个实现类: import org.springframework.stere

【Spring实战】—— 6 内部Bean

本篇文章讲解了Spring的通过内部Bean设置Bean的属性. 类似内部类,内部Bean与普通的Bean关联不同的是: 1 普通的Bean,在其他的Bean实例引用时,都引用同一个实例. 2 内部Bean,每次引用时都是新创建的实例. 鉴于上述的场景,内部Bean是一个很常用的编程模式. 下面先通过前文所述的表演者的例子,描述一下主要的类: package com.spring.test.setter; import com.spring.test.action1.PerformanceExc

Spring实战(七)Bean 的作用域

1.Spring中bean 的多种作用域 单例(Singleton):整个应用中只创建一个bean 的实例,Spring默认创建单例的bean: 原型(Prototype):每次注入or通过Spring应用上下文获取时,创建一个新的bean实例: 会话(Session):在web应用中,为每个会话创建一个bean实例,例如用户购物车的bean: 请求(Request):在web应用中,为每个请求创建一个bean实例: 2.设置会话(Session)作用域 @Component @Scope{ v

【Spring实战-3】Spring整合Hibernate、Struts

作者:ssslinppp      1. 摘要 版本: Spring4.0.4:Hibernate4.3.5:struts2.3.16: 主要介绍了如下内容: 项目结构的规划: Spring下整合Hibernate的具体过程: 整合struts的过程: 重点介绍Dao层的设计: 2. 项目结构 lib文件: 3. web.xml 因为需要整合struts和Hibernate,所以需要配置spring监听器.以及struts分发器. <?xml version="1.0" enco

Spring实战5-基于Spring构建Web应用

主要内容 将web请求映射到Spring控制器 绑定form参数 验证表单提交的参数 写在前面:关于Java Web,首先推荐一篇文章——写给java web一年左右工作经验的人,这篇文章的作者用精练的话语勾勒除了各种Java框架的缘由和最基本的原理.我们在学习Spring的过程中也要切记,不仅要知道怎么做?还要深究背后的思考和权衡. 对于很多Java程序员来说,他们的主要工作就是开发Web应用,如果你也在做这样的工作,那么你一定会了解到构建这类系统所面临的挑战,例如状态管理.工作流和参数验证等

Spring实战 - 手动创建Spring项目结构

环境: MacOS + IntelliJ IDEA 2019.3.1 (Ultimate Edition) 1.创建存放项目的文件夹 2.创建pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchem