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

如何在服务类中使用带有@Autowired的JpaRepository?

暴才俊
2023-03-14

我已经读了这些问题,但没有一个有效:

Spring boot MVC -无法自动连接服务类中的存储库

为什么不能@Autowired a JPA存储库-Spring boot JPA

JpaRepository在服务类中获取Null

还有这个:https://www.baeldung.com/spring-autowired-field-null

不幸的是,它们都不起作用。

我拥有的是:

服务接口

@Service
public interface DayTradeService {
    public List<DayTrade> getDayTrades(List<NotaDeCorretagem> corretagens);
}

服务实施:

public class DayTradeServiceImpl implements DayTradeService {
    
    @Autowired
    private DayTradeRepository dayTradeRepository;
    
    @Override
    public List<DayTrade> getDayTrades(List<NotaDeCorretagem> corretagens) {
        // Several lines of code and some of them is trying to use dayTradeRepository.
    }
}

我的DayTradeRepository:

@Repository
public interface DayTradeRepository extends JpaRepository<DayTrade, Integer> {}

在我的日间贸易控制器(用@Controller注释),我可以使用带有@Autowired的日间贸易存储库。但是在服务类中,我无法使用。我收到以下消息:

Cannot invoke "meca.irpf.Repositories.DayTradeRepository.getDayTrades()" because "this.dayTradeRepository" is null"

我怎样才能让它成为可能?

在我接受Nikita的回答后编辑:

我没有发布< code >控制器代码,但是它没有服务类< code>DayTradeServiceImpl的< code>@Autowired。这就是我忽略的一点。尼基塔指出后,我可以解决这个问题。

共有1个答案

轩辕风华
2023-03-14

您不需要创建新对象。你必须这样打电话:

@Controller
@RequestMapping("/test")
public class TestController {

    @Autowired
    private DayTradeServiceImpl dayTradeService;


    @GetMapping(value = "/get")
    public void getTrades() {
        dayTradeService.getDayTrades(...);
    }

}

并为DayTradeServiceImpl设置注释@Service。

@Service
public class DayTradeServiceImpl implements DayTradeService {
    
    @Autowired
    private DayTradeRepository dayTradeRepository;
    
    @Override
    public List<DayTrade> getDayTrades(List<NotaDeCorretagem> corretagens) {
        // Several lines of code and some of them is trying to use dayTradeRepository.
    }
}

Spring框架使用控制反转,它具有用于bean的容器。对于检测bean,请使用以下注释:@Service、@Component、@Repository。

 类似资料:
  • 在我的服务类中,我有@Autowired HttpServletRequest,并且在我的服务方法中使用相同的对象,但是对于那个服务方法测试类,我不能在我的测试方法中模拟HttpServletRequest对象,请检查下面的代码。我正在获取请求对象的空指针异常

  • 这是我的spring控制器类KalamController Hibernate配置xml文件 EmployeeServiceImpl.Java档案 最后是 当我运行程序时,我得到以下错误 请告诉我哪里出了问题。我是否忘记了xml文件中的任何配置?我的意图是了解如何使用@AutoWired注释在controller中调用服务。

  • 我使用的是spring boot,我有一个从数据库中存储/检索一些数据的服务。我想使用一个石英工作使用我的服务。我从网上尝试了很多建议,想把石英和spring boot整合起来,但都不奏效。 这是我的代码: 1)我添加了org.quartz-scheduler作为pom.xml中的依赖项: 2)这是我的应用程序。配置为将mysql用作我的服务的数据库的属性: 3)这是我的服务: 4)调度程序类:

  • 有没有可能在科特林做类似跟随的事情?

  • 我有一些UserService对用户实体进行操作。我创建了自己的注释和ConstraintValidator类作为实现 我需要将UserService注入到ConstraintValidator中。而且,正如spring文档所说,在注册bean之后: 不幸的是,它对我没有作用。我在字段(在实现ConstraintValidator的类内)使用NullPointerException累加stackt

  • 现在,我在src/test/resources/application.yml中也有source.storage属性,该属性指向src/test中的另一个目录,在该目录中存储测试XML文件,并再次使用@value注释将它们导入到测试类中。我的测试使用HTTP GET调用RESTendpoint。但是,服务似乎仍然将source.storage属性绘制为main application.yml,而我