Spring基础——方法注入(Method Injection)

文章所用项目源码参考:java_spring_learn_repo

查找方法注入(Lookup Method)

  • 通常我们项目开发中大多都使用单例模式的Bean,因此Bean之间的依赖大多都是单例与单例之间的,而如果我们想将prototype模式的Bean被注入到单例模式的Bean中,因为单例Bean只会在创建时注入Bean的引用,所以prototype模式的Bean会一直是最开始创建的实例(换句话说就是prototype间接失效了,已经是单例模式了)。如果想要每次调用prototype模式Bean都获取一个新的实例,可以通过方法注入来实现。
  • 在Spring官方给的文档中提供了一种能在每次调用都获取新实例对象的方案,可以通过实现ApplicationContextAware接口,给Bean注入容器,然后再让Bean需要调用新实例时让容器创建一个新的实例。

ApplicationContextAware是Spring框架中的一个接口,用于让Bean实现类获取对Spring应用上下文(ApplicationContext)的引用。通过实现ApplicationContextAware接口,Bean可以在被实例化后,由Spring容器注入应用上下文的引用,从而获取容器中的其他Bean或执行一些与容器相关的操作。

  • 首先创建一个prototype的Bean
public class Command {
   
    private String state;

    public void setState(String state) {
   
        this.state = state;
    }

    public String execute() {
   
        return this + "对象被执行";
    }
}
  • XML配置Scope为prototype
<bean id="command" class="com.nobugnolife.method_injection.Command" scope="prototype"/>
  • 这里通过实现ApplicationContextAware来获取ApplicationContext,然后在对象每次调用process方法时都会让容器获取一个新的Command实例
public class MyApplicationContextAwareBean implements ApplicationContextAware {
   
    private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值