簡體   English   中英

服務未正確自動接線-基於注釋的配置

[英]Service not being correctly autowired - annotation-based configuration

我正在使用基於注釋的配置-完全沒有XML。

我已經配置了所有內容,但無法弄清楚為什么OrderService沒有自動裝配並繼續為null 最下面的一類是顯示實際問題的類。 其他類都是我的配置。

我在此應用程序上確實有log4j ,但對此沒有經驗。 有沒有一種方法可以記錄正在掃描哪些包/類,以幫助確定為什么它不起作用?

訂購服務

@Service
public class OrderService extends GenericService<OrderDAO, Order> {
    @Autowired
    OrderDAO dao;
}

服務配置

@Configuration
public class Config {
    @Bean
    public OrderService orderService() {
        return new OrderService();
    }
}

主要配置

@Configuration
@ComponentScan(basePackages = {
        "com.production.api",

        //todo: may not need the rest of these
        "com.production.api.dao",
        "com.production.api.models",
        "com.production.api.requests",
        "com.production.api.requests.job",
        "com.production.api.resources",
        "com.production.api.resources.job",
        "com.production.api.services"
})
@Import({
        com.production.api.services.Config.class,
        com.production.api.dao.Config.class
})
@PropertySource(value= "classpath:/META-INF/application.properties")
@EnableTransactionManagement
public class Config {

Main.java

public static void main(String[] args) throws IOException {
    //process annotation configuration
    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);

    HttpServer httpServer = startServer();
    System.out.println(String.format("Jersey app started with WADL available at " + "%sapplication.wadl\nTry out %shelloworld\nHit enter to stop it...", BASE_URI, BASE_URI));
    System.in.read();
    httpServer.stop();
}

問題出在哪里...

@Component
public class NewJobRequestHandler {

    public static Logger logger = Logger.getLogger(Logger.class.getName());

    //@todo Why isn't this autowiring?
    @Autowired
    OrderService orderService;

    public void instantiateOrderService() {
        //@todo remove this manual wiring
        orderService = (OrderService) ApplicationContextProvider.getApplicationContext().getBean("orderService");
    }

    public AuthenticatedApiResponse getResponse(AuthenticatedRequest<NewJobRequest> request) {
        instantiateOrderService();

這里的問題是您的Spring配置和上下文與Jersey / Grizzly堆棧分開了。 您期望Jersey能夠從Spring獲得beans ,但它不知道Spring存在,它的注釋對它沒有任何意義。

您需要用Spring的Jersey Servlet替換Jersey Servlet並添加一個ContextLoaderListener。 看一下有關如何連接Jersey和Spring的示例 我不確定Grizzly的工作方式,但如果它像其他任何servlet容器一樣,則應該可以工作。

對於log4j,您可以將根記錄器級別設置為INFODEBUG ,您將從Spring獲得各種日志語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM