相关疑难解决方法(0)

Spring Java Config:如何使用运行时参数创建原型范围的@Bean?

使用Spring的Java Config,我需要使用只能在运行时获得的构造函数参数来获取/实例化原型范围的bean.请考虑以下代码示例(为简洁起见而简化):

@Autowired
private ApplicationContext appCtx;

public void onRequest(Request request) {
    //request is already validated
    String name = request.getParameter("name");
    Thing thing = appCtx.getBean(Thing.class, name);

    //System.out.println(thing.getName()); //prints name
}
Run Code Online (Sandbox Code Playgroud)

Thing类的定义如下:

public class Thing {

    private final String name;

    @Autowired
    private SomeComponent someComponent;

    @Autowired
    private AnotherComponent anotherComponent;

    public Thing(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}
Run Code Online (Sandbox Code Playgroud)

注意事项name是final:它只能通过构造函数来提供,并保证不变性.其他依赖项是Thing类的特定于实现的依赖项,并且不应该知道(紧密耦合到)请求处理程序实现.

此代码与Spring XML配置完美配合,例如:

<bean id="thing", class="com.whatever.Thing" scope="prototype">
    <!-- other post-instantiation properties omitted --> …
Run Code Online (Sandbox Code Playgroud)

java spring scope prototype spring-java-config

121
推荐指数
4
解决办法
8万
查看次数

使用基于注释的配置创建延迟初始化的Spring bean

我使用Spring的@Component注释来配置Spring 3.0应用程序中的许多bean.我想知道是否可以懒惰地构建一些这些豆 - 尤其是prototype豆类?

java spring annotations dependency-injection lazy-loading

5
推荐指数
1
解决办法
9414
查看次数

如何使用带有构造函数参数的 Spring Prototype Beans?

我确实使用 Spring 和 Lombok。
如果没有原型 bean,我们必须传递目标类需要的依赖项。
我们如何将 bean 标记为原型并正确处理依赖 bean 和构造函数参数?

选项 1 - 没有原型 bean

@Component @RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class Consumer {
  private final SomeDependency iDontNeed; // Consumer class doesn't need
  private final SomeDependency2 iDontNeed2;

  public void method() {
    new Processor("some random per request data", iDontNeed, iDontNeed2);
  }
....
@Value @RequiredArgsConstructor
public class Processor {
  private final String perRequestInputData;
  private final SomeDependency iReallyNeed;
  private final SomeDependency2 iReallyNeed2;
}
Run Code Online (Sandbox Code Playgroud)

选项 2 - 原型 bean

@Component @RequiredArgsConstructor(onConstructor = @__(@Autowired))
public …
Run Code Online (Sandbox Code Playgroud)

java spring design-patterns lombok

0
推荐指数
1
解决办法
2900
查看次数