Spring @Autowired在某些课程中不起作用

时间:2018-11-23 19:08:00

标签: java spring spring-repositories

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

videos

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

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);
}

这在我拥有的所有控制器中都可以正常工作。 但是现在,当我在另一个类中尝试相同的操作时,userRepository实例为null。

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

Authentificator和LoginController不在同一程序包中。但是,它们和UserRepo不在同一个软件包中。

  • 项目
    • UserRepo-package
    • 控制器包装
    • 身份验证程序包

3 个答案:

答案 0 :(得分:2)

@Autowired仅适用于spring上下文。这意味着它仅适用于由Spring管理的类实例。您的Authentificator类由您管理,Spring不必照顾或了解它,这对于Java Framework而言并不重要。

这更多是配置问题,而不是注释问题。

答案 1 :(得分:1)

您必须确保 Authentificator 也是一个spring bean-我的意思是您必须使用@Component或@Service这样的注释。完成此步骤后,您还必须从spring中“获取” Authentificator 实例,而不是使用 new 关键字实例化它。

答案 2 :(得分:0)

如果您希望Spring在Authenticator对象中注入一个字段,则依赖对象也必须由Spring创建。您可以通过将此类标记为@Component或通过使用带有Authenticator批注的@Bean返回类型创建方法来实现。然后必须将其注入某个地方。