`
chenlb
  • 浏览: 696582 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring 依赖注入到直接new 对象

阅读更多

      当为遗留系统加入spring时,经典问题就是遗留系统需要引用spring管理的bean。幸好spring有机制可以处理这些。

建一个类实现ApplicationContextAware接口,有一个引用ApplicationContext的静态成员,然后,遗留系统需要引用spring管理的bean的地方,使用这个类。

1.比如:我这里建一个SpringContext类

package net.blogjava.chenlb;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * 此类可以取得Spring的上下文.
 * Spring 使new方法创建的对象可以引用spring管理的bean.
 * 2007-10-18 上午11:12:33
 * 
@author chenlb
 
*/
public class SpringContext implements ApplicationContextAware {

    
protected static ApplicationContext context;
    
    
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context 
= applicationContext;
    }

    
public static ApplicationContext getContext() {
        
return context;
    }

}


2.然后在spring配置文件里加

<bean id="springContext" class="net.blogjava.chenlb.SpringContext"></bean>


3.其它类中引用

MyBean myBean = (MyBean) SpringContext.getContext().getBean("myBean");


4.如果老是写SpringContext.getContext().getBean("...");麻烦,可以建一个工厂类来返回你要的bean

package net.blogjava.chenlb;



public class MyServerFactory {


    
public static MyBean1 getMyBean1() {
        
return (MyBean1) SpringContext.getContext().getBean("myBean1");
    }
    

}



^_^

流浪汗 2007-10-27 16:31 发表评论
分享到:
评论
6 楼 抛出异常的爱 2007-11-13  
引用
看来,也有人同我这样应用需要的朋友. 我在两个项目遇到这个问题,而且都这种方式解决,个人觉得还没有发现更好的解决方式. 其中一个项目是重做的,重做的时候不用之前做好的一些东西. 之前的类在构造函数里要初始化一此资源(现在 这此被spring管理了), 所以这此类的构造里要引用spring管理的bean, 解决方法是: SpringContext.getContext()... 第二个项目是,系统要用到一个组件,这个组件是用xml定义生成对象的,所以这些生成的对象不能引用spring管 理的bean, 解决方式是:
在这个组件xml定义的类里用工厂方法模式:
public static PrintManager getPrintManager() { 
return (PrintManager) SpringContext.getContext().getBean("printManager"); 
}

所有用到PrintManager(spring管理的)的类
(定义不能放到spring中,而是放到组件xml定义的)
都用 ServerFactory.getPrintManager()得到spring管理的PrintManager 有时间整理一下,
我在项目的用过的这种模式,与大家一起讨论.

javaeye编辑帖子,很不爽,不会分段.


手动bbcode
5 楼 chenlb 2007-11-13  
看来,也有人同我这样应用需要的朋友.

我在两个项目遇到这个问题,而且都这种方式解决,个人觉得还没有发现更好的解决方式.

其中一个项目是重做的,重做的时候不用之前做好的一些东西. 之前的类在构造函数里要初始化一此资源(现在

这此被spring管理了), 所以这此类的构造里要引用spring管理的bean, 解决方法是:

SpringContext.getContext()...

第二个项目是,系统要用到一个组件,这个组件是用xml定义生成对象的,所以这些生成的对象不能引用spring管

理的bean,

解决方式是:在这个组件xml定义的类里用工厂方法模式:

public static PrintManager getPrintManager() {
return (PrintManager) SpringContext.getContext().getBean("printManager");
}

所有用到PrintManager(spring管理的)的类(定义不能放到spring中,而是放到组件xml定义的)都用

ServerFactory.getPrintManager()得到spring管理的PrintManager


有时间整理一下,我在项目的用过的这种模式,与大家一起讨论.

javaeye编辑帖子,很不爽,不会分段.
4 楼 myyate 2007-11-06  
谢谢,正好可以用上了。
如果楼主能够给多点代码,或者完整一点的就好了。总感觉这样给出草草的。
PS:大侠们,给个入门没话说,投隐藏就真无语了!
3 楼 trendcom 2007-11-02  
谢谢这个帖子 。。正好我需要加载一个bean,,但没有办法注入近来。。使用一些方法总是有些问题。。这个代码正好完全满足我的要求
2 楼 chenlb 2007-11-01  
有遗留系统的类没法配置到spring的bean里.
1 楼 lszone 2007-10-29  
为什么不把要用到spring的bean配置到ApplicationContext里面?

相关推荐

    Spring依赖注入的方式

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本文将深入探讨Spring中的依赖注入方式,包括构造器注入、设值注入...

    spring学习:依赖注入的几种方式讨论

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本文将深入探讨Spring中的依赖注入实现方式,以及如何通过样例文件...

    spring依赖注入bean

    Spring 框架的核心特性之一就是依赖注入(Dependency Injection,简称 DI),这是一种设计模式,它允许我们控制组件之间的耦合,而不是让组件自行创建它们所依赖的对象。这有助于提高代码的可测试性、可维护性和灵活...

    Spring依赖注入使用setter设注入demo

    这个简单的例子展示了Spring依赖注入的核心概念,即通过setter方法将依赖注入到目标对象中。在实际开发中,开发者可以根据需求选择使用setter注入、构造函数注入或者字段注入。setter注入的灵活性在于可以在不改变...

    Spring依赖注入使用构造设注入demo

    本篇将详细讲解如何使用构造器注入作为Spring依赖注入的一种方式,并通过一个完整的可运行示例——"SpringIOCTest2"来加深理解。 首先,理解依赖注入的概念。依赖注入允许我们不在类内部创建对象,而是通过外部源...

    模拟spring依赖注入

    依赖注入则是将这种耦合关系反转,由外部容器(如Spring IoC容器)负责创建对象并管理它们的依赖关系,使得对象可以在不知道依赖的具体实现的情况下工作,降低了代码的复杂性。 Spring框架的IoC(Inversion of ...

    模拟Spring的依赖注入

    在模拟Spring的依赖注入时,我们可以创建一个类似于Spring容器的类,负责创建和管理对象以及它们的依赖关系。这个类可以包含一个注册方法,用于接收需要注入的对象及其依赖,然后在创建对象时进行注入。 **创建模拟...

    Spring依赖注入使用实例工厂设注入demo

    依赖注入允许我们把一个对象(依赖)传递到另一个对象(客户端)中,而不是让客户端自行创建依赖。这有助于解耦组件,使得系统更加灵活,更容易进行单元测试。 接下来,我们讨论实例工厂方法。在Spring中,除了通过...

    Spring依赖注入使用静态工厂设注入demo

    在Spring框架中,依赖注入(Dependency Injection,DI)是一种核心设计模式,它使得对象之间的依赖关系得以解耦,提高了代码的可测试性和可维护性。本篇将详细讲解如何使用静态工厂方法进行依赖注入,结合提供的...

    Spring依赖注入DI.zip

    下面我们将深入探讨Spring依赖注入的概念、工作原理以及如何在实践中应用。 1. **依赖注入概念**: - 依赖:一个类对另一个类的使用称为依赖。 - 注入:将依赖的对象传递给需要它的类,而不是由类自己去创建或...

    使用反射和注解模拟Spring的依赖注入

    在Spring框架中,依赖注入就是利用反射来找到并实例化所需的对象,然后将它们注入到其他对象中。 接下来,我们谈谈注解。注解是元数据的一种形式,可以向编译器或运行时环境提供有关代码的信息。Java中的注解是以`@...

    自己的代码模拟spring的依赖注入

    依赖注入意味着组件不直接创建其依赖的对象,而是由外部实体(如Spring IoC容器)提供。这样做的好处是,我们可以轻松地替换或更改依赖,而无需修改组件的源代码,符合开闭原则。 要模拟Spring的IoC,我们需要以下...

    一个简单的spring依赖注入的例子

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本示例将介绍如何使用Spring框架通过反射机制实现简单的依赖注入。...

    Spring.net(依赖注入应用)

    **Spring.NET 框架详解:依赖注入与应用实践** Spring.NET 是一个开源的企业级应用程序框架,它在.NET平台上实现了类似Java Spring的核心功能,其中包括了依赖注入(Dependency Injection,DI)这一重要设计模式。...

    spring依赖注入的理解.docx

    依赖注入的概念则是将对象的创建和管理交由一个外部容器,即Spring容器来处理。在`Person`类中,我们不再直接创建`Car`对象,而是通过构造函数或setter方法接收`Car`的实例。这样,`Person`类不再负责`Car`的实例化...

    Spring依赖注入

    ### Spring依赖注入详解 #### 一、什么是IoC与DI? 在探讨Spring框架中的依赖注入之前,我们首先需要了解两个核心概念:IoC(Inversion of Control)与DI(Dependency Injection)。这两个概念是理解Spring框架...

    Spring学习笔记(5)----依赖注入的简单实现

    首先,理解依赖注入的基本思想:对象的依赖关系不再由对象自身管理,而是由外部容器(如Spring应用上下文)负责注入。这样做的好处是降低了对象间的耦合度,使得各个组件可以独立地被测试和复用。 依赖注入在Spring...

    编码剖析Spring依赖注入的原理

    总之,Spring的依赖注入是一种强大的设计模式,它简化了对象之间的依赖关系管理,提高了代码的可读性和可测试性。通过理解其工作原理,开发者可以更有效地利用Spring框架,提升软件开发的质量和效率。

    Spring.Net依赖注入例子

    首先,依赖注入的基本思想是,对象不应该自行创建或查找其依赖的对象,而是应该由外部容器(如Spring.NET的ApplicationContext)在运行时提供这些依赖。这样,对象只需要关注自身的核心业务逻辑,而无需关心依赖对象...

    spring依赖注入

    Spring依赖注入是Java开发中的核心概念,特别是在使用Spring框架时,它是实现松耦合和可测试性的重要机制。依赖注入(Dependency Injection,简称DI)允许我们解耦组件之间的关系,使得代码更易于维护和扩展。它通过...

Global site tag (gtag.js) - Google Analytics