我正在使用基于注释的配置 - 根本没有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();
答案 0 :(得分:0)
这里的问题是你的Spring配置和上下文与Jersey / Grizzly堆栈是分开的。你期望Jersey可以从Spring获得beans
,但它不知道Spring存在,它的注释对它没有任何意义。
您需要使用Spring的Jersey Servlet替换Jersey Servlet并添加ContextLoaderListener。看看this example关于如何为Jersey和Spring打线。我不确定Grizzly是如何工作的,但如果它像任何其他servlet容器一样,这应该可行。
对于log4j,您可以将根记录器级别设置为INFO
或DEBUG
,您将从Spring获得各种日志语句。