[英]Spring @Autowired messageSource working in Controller but not in other classes?
[英]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不在同一个程序包中。
您必须确保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.