Spring引导依赖bean没有设置值

时间:2018-04-11 16:56:33

标签: java spring spring-boot

在我的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;

}

谢谢,

儒略

3 个答案:

答案 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"存在于主项目属性文件中。如果您希望这些值只是因为您拥有它而填充  属性文件"依赖"项目,你可能会感到失望。请查看此内容以获取更多详细信息:

https://stackoverflow.com/a/49564724/3458292