Spring应用教程-2 方法注入

我们通常使用lookup方法注入,它可使Spring替换一个Bean的抽象或具体方法,返回查找容器中,其他Bean的结果,被查找的Bean通常是一个non-singleton Bean。

无状态的Bean的作用域一般可以配置成singleton单实例,如果我们向singleton的BeanA注入prototype的BeanB,并希望每次调用BeanA的getBeanB()时都能返回一个新的BeanB,使用传统的注入方式方法将无法实现这样的要求。因为singleton的Bean注入关联Bean的动作只有一次,虽然BeanB的作用域是prototype类型,返回的对象不是最开始注入的那个bean。

如果希望每次调用BeanA的getBeanB()时都能返回一个新的BeanB一种可选的方案是让Bean实现BeanFactoryAware接口,让BeanA能访问容器的引用,以下代码可以实现方式达到目的:

[+] view code

public class Bean_A implements BeanFactoryAware{

private Bean_B bean_B=null;

private BeanFactory beanFactory=null;

@Override

public void setBeanFactory(BeanFactory beanFactory) throws BeansException {

this.beanFactory=beanFactory;

}

public Bean_B getBean_B(){

return beanFactory.getBean("bean_B", Bean_B.class);

}

}

时间: 2024-08-25 18:34:33

Spring应用教程-2 方法注入的相关文章

Spring 自动装配;方法注入

通过配置defalut-autowire属性,Spring IOC容器可以自动为程序注入Bean:默认是no(不启用自动装配). default-autowire的类型有: byName:通过名称自动进行匹配 byType:通过属性自动进行匹配 示例如下: 一个实体类people public class People{ private int id; private String name; private int age; private Dog dog; } beans.xml配置: <?

【Spring】IOC之方法注入

方法注入在我看来就是为了实现在单例类中取得不同的实例类对象. 当一个Bean依赖的Bean和自己生命周期不同的时候:如Bean A依赖Bean B,Bean A 是singleton,如果需要在Bean A每次用到Bean B的时候都用一个Bean B的新的实例(注意是新的),即使通过在配置文件设置Bean B的 property或者 contructor-arg是不能实现的.这时候只能在Bean A中用Bean B的时候动态得到. 或者可以这么说, 调用一个singleton类型bean A的

Spring学习笔记之方法注入

public  abstract class ReplacedBean {protected static final Log log = LogFactory.getLog(ReplacedBean.class);       public void process() {               AnotherBean anotherBean = createAnotheBean();        anotherBean.doSth();           }    protecte

Spring 4.2 方法注入解决单例Bean的原型Bean依赖问题

当你在单例Bean中使用原型Bean依赖时,注意,依赖在实例化时解析.因此,如果你依赖注入一个原型Bean到单例Bean中,新的原型Bean被实例化然后依赖注入到单例Bean中.提供给单例Bean的原型实例是唯一的. 然而,假设你想单例Bean在运行时多次获取一个新的原型Bean的实例.你不能依赖注入一个原型Bean到你的单例Bean中,因为注入只发生一次,当Spring容器实例化单例Bean时解析并注入它的依赖.如果你在运行时多次需要一个新的原型Bean,可以使用方法注入. 在大多数应用程序情

spring 构造方法注入和setter方法注入的XML表达

1.构造方法注入 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" > 3 <beans> 4 <bean id="person&quo

spring依赖注入之构造函数注入,set方法注入

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org

spring 方法注入、方法替换

spring 提供了很多的注入方式,set注入.构造注入.p命名空间.c命名空间.字段注入等等,这些没啥可说的了. 方法注入 因为开发时我需要spring管理一个实例,但是这个实例并非单例,应该每一次调用都是一个新的实例.所以这时候有需要方法注入. 先创建一个Test类 package com.lhf.lookup; public class Test { public void work(){ System.out.println("我是一名java开发工程师"); } } 然后创建

Spring查询方法的注入 为查询的方法注入某个实例

//这里是客户端的代码 当调用CreatePersonDao这个抽象方法或者虚方法的时候由配置文件返回指定的实例 为查询的方法注入某个实例 start static void Main(string[] args)        {            IApplicationContext ctx = ContextRegistry.GetContext();            Console.WriteLine("查询方法");            ObjectFactor

Spring应用教程-3 依赖关系配置

注:组件与组件之间的耦合,采用依赖注入管理,但普通的JavaBean属性值,应直接在代码中设置. 1. 注入其他Bean的属性值 我们分析一下,Bean_A的一个属性要依赖Bean_B的一个属性值.这时应该怎么配,我们以前使用的都是通过setter方法来为Bean设置值,现在我们却要使用getter方法来获取Bean的属性值.使用我们现在的知识完全可以解决这个问题(可以先不看下面的分析,对照Spring应用教程-1的第六节:Bean的生命周期自己分析): ①Bean_A的一个属性要依赖Bean_