无状态的Bean的作用域一般可以配置成singleton单实例,如果我们向singleton的BeanA注入prototype的BeanB,并希望每次调用BeanA的getBeanB()时都能返回一个新的BeanB,使用传统的注入方式方法将无法实现这样的要求。因为singleton的Bean注入关联Bean的动作只有一次,虽然BeanB的作用域是prototype类型,返回的对象不是最开始注入的那个bean
如果希望每次调用BeanA的getBeanB()时都能返回一个新的BeanB一种可选的方案是让Bean实现BeanFactoryAware接口,让BeanA能访问容器的引用,以下代码可以实现方式达到目的:
public BeanB getBeanB(){
return (BeanB)factory.getBean("beanb");
}
但是上面的方法依赖Spring框架,不是最好的方案
利用lookup方法注入
Spring IoC容器有复写Bean方法的能力,这项功能归功于CGLib类包,CGLib可以在运行期动态的操作Class字节码,为bean动态的创建子类或实现类,现在我们声明一个接口,如下:
public interface BeanInterface{
BeanB getBeanB();
}
下面不写任何实现,仅通过配置为该接口提供动态的实现,让getBeanB()接口方法每次都返回新的BeanB
<bean id="beanB" class="com.demo.BeanB" />
<bean id="beanInterface" class="com.demo.BeanInterface">
<lookup-method name="getBeanB" bean="beanB" />
</bean>
通过lookup-method元素标签为BeanInterface的getBeanB提供动态实现,返回prototype的BeanB
ps:lookup方法注入是有一定使用范围的,一般就是在希望通过一个singleton Bean获取一个prototype Bean时使用。
下面是两下相关的博客
http://liaofeng-xiao.iteye.com/blog/643312
http://www.cnblogs.com/shipengzhi/articles/2099693.html
分享到:
相关推荐
在Spring框架中,Lookup方法注入是一种特殊的依赖注入方式,它允许Spring容器动态替换bean中的某个方法,以便在运行时返回不同实例。这种方法主要用于处理单例bean依赖非单例bean的情况,确保每次调用都能获得一个新...
- **@Resource**:也是用于依赖注入,但它属于JSR 250规范的一部分,可以通过name或lookup属性指定依赖的名称。 #### 五、示例代码分析 假设我们有一个简单的例子,包含一个UserService类和一个UserRepository类,...
Spring可以通过调用setter方法或构造器来注入依赖。 7. **AOP代理(AOP Proxy)** Spring通过AOP代理来实现对Bean的增强,提供事务管理、日志记录等服务。有JDK动态代理和CGLIB代理两种方式,前者适用于接口,后者...
从压缩包子文件的文件名称来看,我们有两个视频教程:Spring16_高级依赖注入.wmv和Spring15_协调作用域不同的Bean与lookup方法注入.wmv。接下来,我将详细介绍这两个关键知识点。 首先,**依赖注入**是Spring框架的...
Lookup 方法注入是 Spring Framework 中的一种机制,它允许容器覆盖容器管理的 bean 的方法,并返回另一个名为的 bean 的结果。这种机制是通过使用 CGLIB 库来动态生成子类实现的。例如,在 CommandManager 类中,...
例如,我们可以使用 lookup-method 标签来注入方法。 <!-- 方法注入 --> <bean id="author" class="net.deniro.spring4.bean.Author" scope="prototype" p:name="毛姆" /> <bean id="book2" class="net.deniro....
IoC 有两种方式:DL(Dependency Lookup)依赖查找和 DI(Dependency Injection)依赖注入。 DL 依赖查找 DL 依赖查找是一种 IoC 方式,它通过容器查找对象的依赖关系,典型的是 JNDI(Java Naming and Directory ...
- Spring提供了对Bean生命周期的精细控制,如初始化方法(init-method)和销毁方法(destroy-method)。 4. **自动装配(Autowiring)** - 自动装配是Spring框架的一个特性,允许容器自动将依赖项匹配到相应的...
本章主要介绍Spring框架中的控制反转(Inversion of Control,IoC)思想,以及依赖注入(Dependency Injection,DI)与依赖查找(Dependency Lookup,DL)两种实现IoC的方式。此外,还涉及了Spring程序开发的基本...
Lookup方法注入 3.3.8.2. 自定义方法的替代方案 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. 其他作用域 3.4.3.1. 初始化web配置 3.4.3.2. Request作用域 3.4.3.3. Session作用域 3.4...
只要在字段、setter方法或构造函数上添加`@Autowired`,Spring就会自动匹配并注入相应的Bean。 ```java public class MyClass { @Autowired private MyBean myBean; } ``` 4. **通过`@Resource`注解** `@...
在Spring框架中,如果你希望一个类的实例在所有属性注入完成后自动执行某些特定的方法,你可以利用Spring的初始化回调机制。这个机制允许你在对象完全构造并准备好执行业务逻辑时执行一些自定义的操作。以下是对这个...
Spring系列第12篇:lazy-init:bean延迟初始化Spring系列第13篇:使用继承简化bean配置(abstract & parent)Spring系列第14篇:lookup-method和replaced-method比较陌生,怎么玩的?Spring系列第15篇:代理详解(Java...
在`<bean>`元素中,`lookup-method`和`replaced-method`属性的引入,使得在运行时动态查找或替换bean的方法成为可能,这是对AOP(面向切面编程)的一种补充,提供了更细粒度的控制。 除此之外,`<util>`命名空间在...
Spring框架以其非侵入式的设计哲学著称,通过依赖注入(Dependency Injection,DI)和面向切面编程(Aspect Oriented Programming,AOP)等技术,实现了组件之间的解耦,使得代码更加灵活、可测试和可重用。...
Spring的核心理念是控制反转(IoC,Inversion of Control)和依赖注入(DI,Dependency Injection)。 1. **依赖管理问题** - **问题一**:在多层架构中,各层之间通常通过接口进行通信。然而,直接在Service层中...
Spring 是一个开源的Java应用程序框架,它简化了开发过程,提供了依赖注入、面向切面编程以及大量实用工具。Spring Boot 是 Spring 的一个子项目,它旨在简化 Spring 应用程序的初始搭建以及开发过程。 创建Spring...