我需要在启动时使用带有构造函数参数的Spring Boot初始化以下PointQuadTree
类,并使该对象在整个应用程序中可用。构造函数参数'minX,maxX,...'需要来自application.properties文件。
PointQuadTree
public class PointQuadTree<T extends PointQuadTree.Item> {
private final Bounds mBounds;
public PointQuadTree(double minX, double maxX, double minY, double maxY) {
this(new Bounds(minX, maxX, minY, maxY));
}
...
}
界
public class Bounds {
public final double minX;
public final double minY;
public final double maxX;
public final double maxY;
public final double midX;
public final double midY;
public Bounds(double minX, double maxX, double minY, double maxY) {
this.minX = minX;
this.minY = minY;
this.maxX = maxX;
this.maxY = maxY;
midX = (minX + maxX) / 2;
midY = (minY + maxY) / 2;
}
...
}
我尝试使用PointQuadTree
注释@Component
,但没有没有参数的构造函数。即使我添加不带参数Bounds
的构造函数为final
,也不能在PointQuadTree
初始化后设置。另外Bounds
有一个只带参数的构造函数。
初始化PointQuadTree
后,我需要它在内存中,并且需要能够在其他组件中自动装配它以读取/删除/添加项目。我不知道如何使用Spring Boot执行此操作。非常感谢任何帮助。
答案 0 :(得分:7)
这就像以Spring方式创建bean一样简单......
@Configuration
public class AppBeans{
@Value("${minx:100}")
private double minX;
...so on ..
@Bean
public PointQuadTree pointQuadTree()
{
return new PointQuadTree(minX...so on);
}
}
并使用@Autowired
此处${minx:100}
尝试从属性文件中读取,如果未指定,则将默认值设为100
答案 1 :(得分:1)
在某个配置文件中创建一个tree bean的spring bean,如下所示:
@Configuration
public class PointQuadTreeBeans
{
@Bean(name="theSameTree")
public PointQuadTree getPointQuadTree(Environment env)
{
double minX = env.getProperty("minX");
double maxX = env.getProperty("maxX");
double minY = env.getProperty("minY");
double maxY = env.getProperty("maxY");
PointQuadTree tree = new PointQuadTree(minX, maxX, minY, maxY);
}
}
并将此类添加到spring componentScan
<强> UPD 强>
另一种方式:而不是double minX = env.getProperty("minX");
您可以使用@Value
创建字段,就像@chrylis在评论中所说:
@Value("${minX}")
private double minX;
然后使用它来创建bean。