1af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb/** 2af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * Copyright (C) 2007 Google Inc. 3af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * 4af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * Licensed under the Apache License, Version 2.0 (the "License"); 5af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * you may not use this file except in compliance with the License. 6af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * You may obtain a copy of the License at 7af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * 8af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * http://www.apache.org/licenses/LICENSE-2.0 9af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * 10af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * Unless required by applicable law or agreed to in writing, software 11af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * distributed under the License is distributed on an "AS IS" BASIS, 12af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * See the License for the specific language governing permissions and 14af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * limitations under the License. 15af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb */ 16af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb 17af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinbpackage com.google.inject.servlet; 18af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb 19af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinbimport com.google.inject.Injector; 20b7a02b02d81c830d148355c90bc309bcd66fb592sberlin 21efd485281e69b997844450ac214e1feeed154991dhanjiimport java.lang.ref.WeakReference; 22b7a02b02d81c830d148355c90bc309bcd66fb592sberlin 23af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinbimport javax.servlet.ServletContext; 24af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinbimport javax.servlet.ServletContextEvent; 25af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinbimport javax.servlet.ServletContextListener; 26af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb 27af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb/** 286634fe165d3729e2fcdf5309d815a8ea2906f6a8dhanji * As of Guice 2.0 you can still use (your subclasses of) {@code GuiceServletContextListener} 296634fe165d3729e2fcdf5309d815a8ea2906f6a8dhanji * class as a logical place to create and configure your injector. This will ensure the injector 306634fe165d3729e2fcdf5309d815a8ea2906f6a8dhanji * is created when the web application is deployed. 31ec76179f50f9d8c340b311c6b019c00526566b66sberlin * 32af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * @author Kevin Bourrillion (kevinb@google.com) 33b92a84ed99fd17a1b5d239431d9c6c670b5702e8limpbizkit * @since 2.0 34af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb */ 35af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinbpublic abstract class GuiceServletContextListener 36af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb implements ServletContextListener { 37af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb 38af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb static final String INJECTOR_NAME = Injector.class.getName(); 39af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb 40af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb public void contextInitialized(ServletContextEvent servletContextEvent) { 41f66aac1249b37245e9860160f8fc52124d32b811dhanji final ServletContext servletContext = servletContextEvent.getServletContext(); 42efd485281e69b997844450ac214e1feeed154991dhanji 43efd485281e69b997844450ac214e1feeed154991dhanji // Set the Servletcontext early for those people who are using this class. 44ec76179f50f9d8c340b311c6b019c00526566b66sberlin // NOTE(dhanji): This use of the servletContext is deprecated. 45efd485281e69b997844450ac214e1feeed154991dhanji GuiceFilter.servletContext = new WeakReference<ServletContext>(servletContext); 46f66aac1249b37245e9860160f8fc52124d32b811dhanji 47f66aac1249b37245e9860160f8fc52124d32b811dhanji Injector injector = getInjector(); 48f66aac1249b37245e9860160f8fc52124d32b811dhanji injector.getInstance(InternalServletModule.BackwardsCompatibleServletContextProvider.class) 49f66aac1249b37245e9860160f8fc52124d32b811dhanji .set(servletContext); 50f66aac1249b37245e9860160f8fc52124d32b811dhanji servletContext.setAttribute(INJECTOR_NAME, injector); 51af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb } 52af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb 53af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb public void contextDestroyed(ServletContextEvent servletContextEvent) { 54af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb ServletContext servletContext = servletContextEvent.getServletContext(); 55af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb servletContext.removeAttribute(INJECTOR_NAME); 56af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb } 57af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb 58af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb /** 59af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * Override this method to create (or otherwise obtain a reference to) your 60af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb * injector. 61af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb */ 62af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb protected abstract Injector getInjector(); 63af46529390705cbc41d51e68bbfccdc7fbb43ac9kevinb} 64