作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现使用 @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/
我是一名优秀的程序员,十分优秀!