繁体   English   中英

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

[英]Spring @Autowired not working in some classes

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

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的实例

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

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

public class Authentificator {
    @Autowired
    private UserRepository userRepository;
}

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

  • 项目
    • UserRepo包
    • 控制器 - 包装
    • Authentificator,包

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM