【发布时间】:2020-07-03 04:10:00
【问题描述】:
我是 Java Spring boot 的新手,我正在使用 JPA 开发 REST API。
所以,我想在@RestController 之外访问JpaRepository。我在类头的顶部使用@Component 注释并使用@Autowired 注释来声明我的存储库实例。
但是,存储库实例总是为空。
应用类
@SpringBootApplication
@EnableJpaAuditing
public class PriceHandlerServiceApplication
{
public static void main( String[] args )
{
SpringApplication.run( PriceHandlerServiceApplication.class, args );
}
}
存储库
@Repository
public interface ConfigRepository extends JpaRepository<ServiceConfiguration,Long>
{
}
模型类
@Entity
@Table( name = "service_configuration" )
@EntityListeners( AuditingEntityListener.class )
public class ServiceConfiguration
{
@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
@JsonProperty("id")
private Long id;
@NotBlank
@JsonProperty( "name" )
private String name;
@JsonProperty( "value" )
private Double value;
public ServiceConfiguration()
{}
}
服务类
@Component
public class ConfigurationHandler
{
@Autowired
private static ConfigRepository configRepository;
public static List<ServiceConfiguration> getAllConfigurations(){
return configRepository.findAll();
}
}
我用另一个班级给ConfigurationHandler.getAllConfigurations()打电话。但是configRepository 总是为空。
[更新]
删除静态关键字,但仍然无法正常工作。仍然 configRepository 存储库为空
@Component
public class ConfigurationHandler
{
@Autowired
private ConfigRepository configRepository;
public ConfigurationHandler()
{ }
public List<ServiceConfiguration> getAllConfigurations()
{
return configRepository.findAll();
}
}
【问题讨论】:
-
您不能在 Spring 中自动装配静态字段。你能试着去除静电并尝试吗?
-
@Govind 如果我删除静态,那么我如何从另一个类中调用“getAllConfigurations()”方法。我想从另一个类访问这些实例。我可以创建新实例并调用此方法吗?
-
您正在创建一个新的 ConfigurationHandler 实例。您应该使用 Spring 上下文中的 ConfigurationHandler ,该上下文将自动装配 configRepository。使用来自实例字段或构造函数参数的 @Autowired 实例。
-
@darkz
ConfigurationHandler类对我来说看起来不错。问题是你在哪里使用它,就像List<ServiceConfiguration> list = new ConfigurationHandler().getAllConfigurations();。你应该像List<ServiceConfiguration> list = configurationHandler.getAllConfigurations();这样使用它,其中configurationHandler是 Spring 自动装配的实例字段。 -
@darkz,您可以自动装配 ConfigurationHandler 类并调用 getAllConfigurations() 方法,也可以自动装配 ConfigRepository 类并调用 findAll () 方法到另一个类中。
标签: java spring spring-boot hibernate jpa