Chúng tôi đã quyết định sử dụng Dependency Injection với các chú thích JSR-330 cho các nỗ lực mô đun hóa tương lai của chúng tôi, và đã rất hài lòng với lần phát hàng đầu tiên dựa trên Guice 2 SVN. Bây giờ chúng ta cần đảm bảo và tài liệu thông qua các bài kiểm tra đơn vị mà chúng ta cần, cũng làm việc trong Spring khi được cấu hình theo chương trình (chúng tôi muốn hỗ trợ tái cấu trúc tương tự như với Guice do đó không có tệp XML). Tôi có vấn đề với @Provider
và @Inject @Named("foo") String
nhưng tôi đã thực hiện đồng bằng @Inject
làm việc với:Làm cách nào để định cấu hình JSR-330 @Provider và @Inject @Named ("foo") Chuỗi ** lập trình ** trong Spring?
ApplicationContext ctx = new AnnotationConfigApplicationContext(LIBL_Object.class,
CORE_Provider.class);
this.object = ctx.getBean(LIBL_Object.class);
nơi LIBL_Object là lớp cơ sở để được tiêm vào, nhưng CORE_Provider không đăng ký như tôi hy vọng trong mùa xuân.
Việc thực hiện CORE_Provider là
package qa.jsr330.core;
import javax.inject.Provider;
public class CORE_Provider implements Provider<ProvidedInterface> {
@Override
public ProvidedInterface get() {
return new CORE_Provided();
}
}
và tôi muốn nó tiêm vào
package qa.jsr330.core;
import javax.inject.Inject;
public class LIBL_Object {
private ProvidedInterface provided;
public ProvidedInterface getProvided() {
return provided;
}
@Inject
public void setProvided(ProvidedInterface provided) {
this.provided = provided;
}
// Other stuff omitted.
}
Ngoài ra chúng tôi đã phát hiện ra rằng chúng ta có thể vượt qua giá trị cấu hình rất rõ ràng bằng cách sử dụng thẻ @Named. Mã này trông giống như:
String hostname;
@Inject
public void setHostname(@Named("as400.hostname") String hostname) {
this.hostname = hostname;
}
nơi thì chúng ta có thể đăng ký chuỗi này với Guice sử dụng
bindConstant().annotatedWith(Names.named("as400.hostname")).to(value);
Vì vậy, hai câu hỏi là:
- Làm thế nào để đăng ký lớp
@Provider
với mùa xuân 3 theo chương trình? - Làm cách nào để đăng ký chuỗi liên tục với Spring 3 để @Named chọn đúng cách?
Cảm ơn bạn! Các "as400.hostname" tiêm công trình - đó là tuyệt vời - nhưng CORE_Provider subclass tôi đã viết với các chú thích bạn đề nghị, không được chọn (nhưng tôi có thể đăng ký một thể hiện của giao diện, mà sau đó được tiêm). Tôi nhận được "Không phù hợp với loại đậu ..." ngoại lệ từ mùa xuân. Tôi bị thiếu bụi pixie nào? –
> không có thứ gì như cấu hình có lập trình của Spring ... Tôi không chắc chắn ý bạn là gì bởi "programmatic", nhưng mã ví dụ của bạn nơi bạn cấu hình AnnotationConfigApplicationContext từ Java có vẻ lập trình cho tôi? –