Spring @Autowired 在某些 类 中不工作

Spring @Autowired not working in some classes

所以我正在使用 Spring 访问我的数据库并根据不同的属性获取用户。使用@Restcontroller,我得到了数据。我创建了一个扩展 CrudRepository 的 UserRepository。

import org.springframework.data.repository.CrudRepository;

public interface UserRepository extends CrudRepository<User, Integer> {
Iterable<User> findByNachname(String nachname);

    Iterable<User> findByRolle(Rolle rolle);

    Optional<User> findByBenutzername(String benutzername);

    @Transactional
    String deleteByBenutzername(String benutzername);
}

我使用@Autowire 在我的控制器中获取 UserRepo 的实例-class

@RestController
public class LoginController {
    @Autowired
    private UserRepository userRepository;
}

这在我拥有的所有控制器中都运行良好。 但是现在当我在另一个 class 中尝试相同时,userRepository 实例为空。

public class Authentificator {
    @Autowired
    private UserRepository userRepository;
}

Authentificator 和 LoginController 不在同一个包中。但是它们都与UserRepo不在同一个包中。

您必须确保 Authentificator 也是一个 spring bean - 我的意思是您必须用 @Component 或 @Service 之类的东西对其进行注释。在此步骤之后,您还必须从 spring“获取”Authentificator 实例,而不是使用 new 关键字实例化它。

如果您希望 Spring 在 Authenticator 对象中注入一个字段,依赖对象也必须由 Spring 创建。您可以通过将此 class 标记为 @Component 或创建一个带有 Authenticator return 类型并标有 @Bean 注释的方法来实现。那么一定要注入到某个地方。

@Autowired 仅适用于 spring 上下文。这意味着它仅适用于 Spring 管理的 class 个实例。您的 Authentificator class 由您管理,Spring 不必关心或了解它,这对 Java 框架并不重要。

这更像是一个配置问题,而不是注释问题。