2015-01-21 39 views
3

我需要在啓動時使用具有構造函數參數的Spring Boot初始化以下PointQuadTree類,並在整個應用程序中使對象可用。構造函數參數'minX,maxX,...'需要來自application.properties文件。在啓動時使用構造函數參數進行初始化的Spring引導

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

我沒有時間獲得完整答案,但使用JavaConfig構造bean和值爲「@ ConfigurationProperties」。 – chrylis 2015-01-21 06:16:56

回答

6

這是Spring創建方式豆子那樣簡單......

@Configuration 
public class AppBeans{ 
@Value("${minx:100}") 
private double minX; 
...so on .. 
@Bean 
    public PointQuadTree pointQuadTree() 
    { 
     return new PointQuadTree(minX...so on); 
    } 

} 

,並注入這個bean您要使用@Autowired

這裏${minx:100},試圖從屬性讀取文件,如果沒有指定採用默認值爲100

+0

豆似乎現在正在初始化,但是當我在例如自動裝載它時「A」和「B」類,這兩個類似乎是不同的對象。如果我將項添加到'A'類中的'PointQuadTree'中的'java.util.List',那些項不在'B'類中。他們在不同的環境或類似的東西? – Jerry 2015-01-21 09:36:31

+0

對不起..沒有得到確切的查詢..你可以更新你的問題到底是你在找什麼?就上下文而言,不關心它 – 2015-01-21 09:45:09

+0

它現在正在工作。我在bean上放了一個'@Bean(name =「pointQuadTree」)'註釋,然後在自動裝配的對象上添加了'@Qualifier(「pointQuadTree」)'。 – Jerry 2015-01-21 11:27:10

1
在一些配置文件

創建樹的一個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); 
    } 


} 

,並添加這個類去春來componentScan

UPD

另一種方式:

而不是double minX = env.getProperty("minX");您可以用@Value創建字段,如@ch rylis在評論中說:

@Value("${minX}") 
private double minX; 

然後用它來創建bean。

+0

Spring通過'@ ConfigurationProperties'或'@Value'提供了對屬性注入的更清晰的支持。 – chrylis 2015-01-21 07:08:24

相關問題