2012-05-22 29 views
8

Tôi đang sử dụng Spring @Configuration để định cấu hình ứng dụng của mình.Nhiều lớp Spring @Configuration

Hiện tại tôi có một lớp @Configuration duy nhất nơi tất cả các hạt của tôi được khai báo. Khi số lượng đậu đang tăng (hơn 30), tôi muốn chia nó thành nhiều lớp.

Một số đậu đang sử dụng các lớp học thông thường (chủ yếu là lớp tiện ích):

Foo.class là một lớp tiện ích Bar.classBaz.class đều sử dụng Foo.class

Tôi muốn có Foo, Bar và Baz trong ba lớp @Configuration riêng biệt (tương ứng Conf1, Conf2 và Conf3)

Vấn đề là tôi không có quyền truy cập vào một thể hiện của Conf1 từ Conf2 và Conf3:

Conf1.class

@Configuration 
public class Conf1 { 
    @Bean 
    public Foo foo() { 
     return new Foo(); 
    } 
} 

Conf2.class

@Configuration 
public class Conf2 { 
    @Bean 
    public Bar bar() { 
     Bar bar = new Bar(); 
     bar.setFoo(conf1.foo()); // Not possible ! 
     return bar; 
    } 
} 

Conf3.class

@Configuration 
public class Conf3 { 
    @Bean 
    public Baz baz() { 
     Baz baz = new Baz(); 
     baz.setFoo(conf1.foo()); // Not possible ! 
     return baz; 
    } 
} 

Bất kỳ ý tưởng nào về cách tôi có thể giải quyết vấn đề này?

Trả lời

9

Bạn sẽ có thể autowire họ:

@Configuration 
public class Conf2 { 
    @Autowired 
    Conf1 conf1; 
    ... 
} 

Ngoài ra, bạn có thể autowire đậu chứ không phải là cấu hình:

@Configuration 
public class Conf2 { 
    @Autowired 
    Foo foo; 
    ... 
} 
+0

@Autowired, tất nhiên! thanks axtavt – chrisnfoneur

5
@Configuration 
@Import({ DataSourceConfig.class, TransactionConfig.class }) 
public class AppConfig extends ConfigurationSupport { 
     // bean definitions here can reference bean definitions in DataSourceConfig or TransactionConfig 
} 
+0

Đây là những gì tôi cần vì tôi có nhiều nguồn dữ liệu và đây là cách sạch sẽ để treo tất cả chúng ra khỏi lớp SpringWebConfig.class. –

+0

Rất vui được! :) – jujadhav

Các vấn đề liên quan