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不在同一个包中。
- 项目
- 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 框架并不重要。
这更像是一个配置问题,而不是注释问题。
所以我正在使用 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不在同一个包中。
- 项目
- 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 框架并不重要。
这更像是一个配置问题,而不是注释问题。