由於我在關於CDI的文檔方面掙扎不已,我希望這個問題能夠成爲在Jersey/Glassfish中使用的正確CDI註釋的有用資源。使用Jersey/Glassfish更正CDI註釋
假設我們有一個應用程序BookStore
:
package my.bookstore;
import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;
@ApplicationPath("/bookstore")
public class BookStore extends ResourceConfig {
public BookStore() {
this.packages("my.bookstore.resource");
}
}
我們希望通過RESTful服務Book
實體訪問:
package my.bookstore.entity;
public class Book {
public String isbn;
public String title;
public String author;
public Book(String isbn, String title, String author) {
this.isbn = isbn;
this.title = title;
this.author = author;
}
}
所以我們需要一個DAO
訪問數據存儲:
package my.bookstore.dao;
import my.bookstore.entity.Book;
import java.util.List;
public interface BookDAO {
public List<Book> getAllBooks();
}
及其實施:
package my.bookstore.dao;
import my.bookstore.entity.Book;
import java.util.List;
import java.util.ArrayList;
public class DefaultBookDAO implements BookDAO {
public List<Book> getAllBooks() {
List<Book> bookList = new ArrayList<>();
list.add(new Book("1234", "Awesome Book", "Some Author"));
return bookList;
}
}
然後我想在DefaultBookDAO
注入RESTful服務:
package my.bookstore.resource;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/books")
public class BookResource {
@Inject
BookDAO dao;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Book> getBooks() {
return this.dao.getAllBooks();
}
}
現在,部署應用程序時,我得到:
Unsatisfied dependencies for type BookDAO with qualifiers @Default
,因爲我需要讓CDI知道它;但是如何?我嘗試了各種組合@Named
,@Default
,@Model
,@Singleton
,@Stateless
和許多資源,如問題和博客文章都有他們自己的解釋。
什麼是在Jersey/Glassfish中使用這個注射工作的正確的純CDI註釋?
什麼版本的玻璃魚? –
@JohnAment Glassfish 4.1 –