【问题标题】:Lambda inject service + daoLambda 注入服务 + dao
【发布时间】:2018-11-04 22:01:37
【问题描述】:

我有一个已部署且运行良好的 Amazon Lambda (springboot)。

我以这种方式从外部项目注入服务(依赖添加到 pom):

@Bean
public SomeExternalService someExternalService() {
    return new SomeExternalService;
}

我必须这样做,因为当上传到亚马逊时,@Autowired 不起作用。

现在,从另一个 springboot 项目(不是 lambda)我有这个使用 DAO 的服务。

服务

@Service
public class StateService  {

@Autowired
private StateRepository repository;

/**
 * Find all {@code State}
 */
public void findSomething(String thing) {
    return repository.findSomething("thing");
}
.....

存储库

@EnableScan
public interface StateRepository extends PagingAndSortingRepository<State, String> {
    List<State> findSomething(String thing);

构建时我得到

创建名为“StateService”的 bean 时出错:不满足的依赖关系 通过字段'repository'表达

org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 'mypackage.repository.StateRepository' 类型的限定 bean 可用:预计至少有 1 个符合 autowire 条件的 bean 候选人。

我像其他人一样注入该服务

@Bean
public StateService stateService() {
    return new StateService;
}

我不能为StateRepository 做同样的事情。

【问题讨论】:

  • 如果你使用@Autowired,这意味着Spring已经定义了你正在注入的bean。在您的情况下,我不确定 Spring 是否知道 StateRepository 并且此存储库不在上下文中。您是否尝试使用 @Bean 创建存储库?

标签: java spring spring-boot dependency-injection aws-lambda


【解决方案1】:

StateRepository 类必须有@Component 注解或将其作为@Bean 添加到您的@Configuration 类中。

@Configuration
@ComponentScan("com.company")
public class ConfigClass {
   // your @Bean's
   @Bean
   public StateRepository stateRepository() {
       return new StateRepository();
   }
   // now can @Autowired
}

【讨论】:

  • 不需要,它已经有@Service 并且注入服务不是问题。注入存储库是。编辑,我正在尝试
  • 我的意思是 StateRepository
  • 或者创建StateRepository的bean
  • 不,它没有帮助。在 Amazon 上部署时仍然找不到 bean 存储库
  • 你有org.springframework.beans.factory.NoSuchBeanDefinitionException,它只是说没有使用注释或在xml配置中的bean定义。如果您有添加它的 xml 配置。如果您使用@Component 注释,则不再需要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 2018-10-31
  • 2023-03-04
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 2020-09-09
相关资源
最近更新 更多