当前位置: 首页 > 知识库问答 >
问题:

spring——如何注入具体的接口实现?

糜雪峰
2023-03-14

我需要通过@Autowired注入服务类的具体实现。

服务接口:

public interface PostService {
...
}

实现:

@Service("postServiceImpl")
public class PostServiceImpl implements PostService {
...
}

服务中的方法带有@ Transactional注释

现在我想将postServiceImpl注入到我的控制器中——因为我需要使用实现中的一个方法,它不在接口中:

@Autowired
@Qualifier("postServiceImpl")
private PostServiceImpl postService;

我收到NoSuchBeanDefinitionException并显示以下消息:

没有[(…)类型的合格bean。找到依赖项的PostServiceImpl]:预计至少有1个bean符合此依赖项的自动连接候选条件。

当我将控制器中的字段更改为:

private PostService postService

它可以工作,但我不能使用PostServiceImpl的特定方法。

共有1个答案

梁丘霖
2023-03-14

由于您的方法被注释为< code>@Transactional,spring将在运行时创建代理,以注入事务管理代码。默认情况下,Spring使用JDK动态代理作为代理机制,它基于接口进行代理。

因此,在这种情况下,spring创建了另一个实现< code>PostService接口的类,并创建了该类的bean。肯定不能自动连接到< code>PostServiceImpl,因为它们是兄弟。然而,如果你真的想在类上自动连线,你可以强迫spring使用CGLib代理,它使用子类来代理。如果使用基于Java的配置,可以通过在< code > @ EnableTransactionManagement 批注中设置< code > proxyTargetClass = true 来实现。

 类似资料:
  • 本文向大家介绍详解Spring中接口的bean是如何注入的,包括了详解Spring中接口的bean是如何注入的的使用技巧和注意事项,需要的朋友参考一下 Question: 这个问题困扰了我好久,一直疑问这个接口的bean是怎么注入进去的?因为只看到使用@Service注入了实现类serviceImpl,使用时怎么能获取的接口,而且还能调用到实现类的方法,难道这个接口是在什么时候自动注入了进去,且和

  • 我正在研究如何将Spring框架与Hibernate集成,对此我有些怀疑。 我开发了一个很好的个人示例,但我不确定该项目的架构。 因此,我在其中有一个名为PERDAO的接口,我已经在我的DAO中声明了CRUD操作 然后,我通过实现前一个接口的类PersonDAOImpl创建了该接口的具体实现。 然后,我创建了以下主要类来测试我的dao对象: } DAO工作得很好,我的对象正确地保存在我的数据库中,

  • 我有一个基于Spring的Java应用程序,其中许多类使用以下自动生成的接口... 现在,接口只有一个实现,如下所示: 应用程序的工作原理与预期一致。Spring是快乐的。大家都很高兴。好吧,不是每个人。。。 所以,我想添加另一个具体的实现... 我们需要的是IOperatingSystemManager根据属性文件设置有条件地自动连接。(比如说..os=windows..基本上是一个任意字符串,

  • 我开始使用JHipster v.3.5.1生成我的应用程序。 过了一段时间,我需要创建验证器,以便在使用POST创建实体时对其执行一些业务逻辑验证。所以我做了: 然后,我尝试将其注入我的控制器(注释为@ResControl ler),但无论我尝试哪种方式,它总是会导致这样的结果: 我尝试创建bean并注入它的方法 然而,我尝试了它-它失败了。我总是得到NoSuchBean定义异常或字段值设置为nu

  • 我有几个EJB3。x无状态会话bean,未定义接口。我需要将这些bean注入到Springbean中,但我无法这样做。 无接口EJB: 我的豆子: 还有我的豆子。xml 在初始化Spring容器时,我得到以下错误: 异常本身非常清楚——spring容器期望MyBean有一个本地接口视图作为其业务接口;但是,我没有(也不能介绍)。 非常感谢您的帮助!

  • 问题内容: 我要测试的Java类(称为)具有以下功能: (有一种方法可以检查条件并调用A或B)。 如何将每个服务的模拟注入适当的变量? 我的Junit拥有以下功能: 但是,当我运行测试以检查在正确条件下调用的服务A / B时,由于没有注入模拟,我得到了空指针。 显然是由于对同一接口()有多个依赖关系。声明模拟服务时,是否可以指定限定词?还是我需要为依赖项设置setter并设置老式方式? 问题答案: