在我的Spring启动应用程序中,我有一个依赖Spring项目。从我的SpringBoot类,我试图调用一个依赖类,但该类没有设置值。
@CrossOrigin(origins = "*")
@RestController
@Configuration
@ComponentScan(basePackages = "com.dependency.package")
public class BootClass {
private DependencyClass dependencyClass;
public BootClass() {
this.dependencyClass = new DependencyClass();
}
}
我的DependencyClass对象只给了我一个空对象{}
。有什么想法吗?
My Dependency类看起来像这样:
@Component
public class DependencyClass {
@Value("${jdbc.driver.class.name}")
private String driver;
@Value("${jdbc.url}")
private String url;
}
谢谢,
儒略
答案 0 :(得分:1)
这是经典的Spring初学者错误:调用new来实例化一个对象。
如果希望Spring管理bean并提供依赖关系,则无法调用new。你必须把它交给Spring bean工厂来管理。这是全部或全部。
你的看起来像构造函数注入的完美案例。
@Configuration
@ComponentScan(basePackages = "com.dependency.package")
public class BootClass {
private final DependencyClass dependencyClass;
@Autowired
public BootClass(@Qualifier(name = "dependencyClass") DependencyClass dependencyClass) {
this.dependencyClass = dependencyClass;
}
}
当然,你可以为DependencyClass
想出一个更好的名字。我建议像DatabaseConfiguration
。
这并不是说每个对象都应该在bean工厂的控制之下,或者永远不应该调用new。具有短作用域但未共享的对象当然可以实例化。
需要依赖注入的对象需要在bean工厂的控制之下。
答案 1 :(得分:0)
使用 @Autowired 注释标记,如下所示。那样做。
@Autowired
private DependencyClass dependencyClass;
答案 2 :(得分:0)
扩展@duffymo的答案:
完成他的建议后,还要确保" jdbc.driver.class.name"和" jdbc.url"存在于主项目属性文件中。如果您希望这些值只是因为您拥有它而填充 属性文件"依赖"项目,你可能会感到失望。请查看此内容以获取更多详细信息: