0

私は注釈ベースの構成を使用しています-XMLはまったくありません。

すべてを構成しましたが、OrderService自動配線されていない理由がわかりませんnull。下の一番下のクラスは、実際の問題を示しているクラスです。他のクラスはすべて私の構成です。

私はlog4jこのアプリケーションを持っていますが、経験がありません。スキャンされているパッケージ/クラスをログに記録して、これが機能しない理由を特定する方法はありますか?

OrderService

@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();
4

1 に答える 1

0

ここでの問題は、Springの構成とコンテキストがJersey/Grizzlyスタックから分離されていることです。あなたはジャージーが春から得ることができることを期待していますbeans、しかしそれは春が存在するという知識を持っていません、その注釈はそれに何の意味もありません。

ジャージーサーブレットをSpringのジャージーサーブレットに置き換えて、ContextLoaderListenerを追加する必要があります。ジャージーとスプリングの配線方法については、この例をご覧ください。Grizzlyがどのように機能するかはわかりませんが、他のサーブレットコンテナと同様であれば、これで機能するはずです。

log4jの場合、ルートロガーレベルをINFOまたはDEBUGに設定すると、Springからあらゆる種類のログステートメントを取得できます。

于 2013-02-28T15:33:41.337 に答える