gpt4 book ai didi

java - @Bean ResourceProcessor 和 @Autowired

转载 作者:行者123 更新时间:2023-11-29 08:29:33 25 4
gpt4 key购买 nike

在我使用 Spring Data REST 和 HATEOAS 的 Spring Boot 1.5.10 应用程序中,我有一个带有 @Autowired 服务的 ResourceProcessor bean,例如:

@Bean
public ResourceProcessor<Resource<Order>> orderResourceProcessor() {
return new ResourceProcessor<Resource<Order>>() {
@Autowired
private OrderHandler orderHandler;

@Override
public Resource<Order> process(Resource<Order> resource) {
Order order = resource.getContent();
Payment payment = orderHandler.payment(order);

resource.add(makeLink(payment));

return resource;
}

private Link makelink(Payment payment) {
return new Link(/*...*/);
}
};
}

添加@Autowired服务后,资源处理器bean不再被触发,很遗憾;即,当 OrderHandler 被注释掉时,资源处理器会正常运行。

ResourceProcessor 可以使用@Autowired 服务吗?如果是这样,构建它的正确方法是什么?

最佳答案

这部分@Bean annotation javadoc你应该感兴趣:

@Configuration 类中的@Bean 方法

Typically, @Bean methods are declared within @Configuration classes. In this case, bean methods may reference other @Bean methods in the same class by calling them directly. This ensures that references between beans are strongly typed and navigable. Such so-called 'inter-bean references' are guaranteed to respect scoping and AOP semantics, just like getBean() lookups would.

示例:

 @Bean
public FooService fooService() {
return new FooService(fooRepository());
}

@Bean
public FooRepository fooRepository() {
return new JdbcFooRepository(dataSource());
}

这意味着您不必使用 @Autowired@Bean 声明中设置依赖关系,而是引用另一个用 @Bean 注释的方法>.
但是你真的需要设置依赖来创建你的 bean 吗?一点也不。 OrderHandler 仅在 process() 调用期间使用。

因此,您可以简单地将 OrderHandler 注入(inject)到与 @Bean 注释的方法相同的级别,并在匿名类中使用它:

@Autowired
private OrderHandler orderHandler; // only change

@Bean
public ResourceProcessor<Resource<Order>> orderResourceProcessor() {
return new ResourceProcessor<Resource<Order>>() {


@Override
public Resource<Order> process(Resource<Order> resource) {
Order order = resource.getContent();
Payment payment = orderHandler.payment(order);

resource.add(makeLink(payment));

return resource;
}

private Link makelink(Payment payment) {
return new Link(/*...*/);
}
};
}

关于java - @Bean ResourceProcessor 和 @Autowired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49414512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com