gpt4 book ai didi

java - 这相当于在 XML 配置文件中使用 @Autowire 注释 Autowiring 接口(interface)?

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

我发现使用 @Autowire 注释注入(inject) ShopRepo 是有效的,但是当我尝试使用 xml 执行此操作时,有时有效,有时无效(另外,intellij 说我不能使用抽象 bean 作为属性)。为什么它使用注释而使用 xml 配置并不总是有效(这就是区别)?我怎样才能使它与 xml 配置一起工作?

代码如下所示:

public interface ShopRepo extends JpaRepository<Product, Long> {
@Override
Optional<Product> findById(Long aLong);
}

public class ShopController {

//@Autowired
private ShopRepo shopRepo;


public void setShopRepo(ShopRepo shopRepo) {
this.shopRepo = shopRepo;
}

public Product findProduct(Long id) {
return shopRepo.findById(1l).orElse(new Product());
}
}


<jpa:repositories base-package="com.example.shop.repository"/>

<bean id="shopRepo" class="com.example.shop.repository.ShopRepo" abstract="true"/>

<bean id="shopController" class="com.example.shop.controller.ShopController">
<property name="shopRepo" ref="shopRepo"/>
</bean>

最佳答案

当你使用@Autowire时,你实际上是在按类型进行 Autowiring 。 @Autowire 只是注入(inject) shopRepo bean 的实现。 shopRepo 的实现是由 jpa 存储库动态实例化的,通常是在 spring 容器启动期间。

您的 xml 配置没有按类型进行任何 Autowiring ,它正在尝试将 id 为“shopRepo”的 bean 注入(inject)到 shopcontroller bean 中。 xml 中的 shopRepo 定义只是一个定义,而不是 jpa 存储库创建的实际实现的名称。

您可以在 xml 文件中遵循此操作。希望这可以帮助。

<bean id="shopRepo" class="com.example.shop.repository.ShopRepo" abstract="true"/>
<bean id="shopController" class="com.example.shop.controller.ShopController" autowire="byType">
</bean>

关于java - 这相当于在 XML 配置文件中使用 @Autowire 注释 Autowiring 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50758080/

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