/* * Copyright 2005 Joe Walker * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.directwebremoting; import java.util.Collection; /** * A very basic IoC container. * See ContainerUtil for information on how to setup a {@link Container} * @author Joe Walker [joe at getahead dot ltd dot uk] */ public interface Container { /** * Get the contained instance of a bean/setting of a given name. * @param id The type to get an instance of * @return The object of the given type, or null if the object does not exist */ Object getBean(String id); /** * Get the contained instance of a bean of a given type * @param type The type to get an instance of * @return The object of the given type, or null if the object does not exist */ <T> T getBean(Class<T> type); /** * Get a list of all the available beans. * Implementation of this method is optional so it is valid for this method * to return an empty collection, but to return Objects when queried * directly using {@link #getBean(String)}. This method should only be used * for debugging purposes. * @return A collection containing all the available bean names. */ Collection<String> getBeanNames(); /** * This should be called <em>only</em> by * {@link org.directwebremoting.servlet.DwrListener}. It requests all * reverse ajax threads to stop. * <p> * {@link javax.servlet.http.HttpServlet#destroy()} is called only when all * connections are closed. If a DwrListener is configured then we can close * down the connections in a timely way. All other tidy-up is done by * {@link #servletDestroyed()} which will work even when a DwrListener has * not been configured. * @see #servletDestroyed() */ void contextDestroyed(); /** * Should be called only by {@link org.directwebremoting.servlet.DwrServlet} * (or other servlet implementations). It requests all other threads to * stop, and any tidy-up that can be done after the context has been fully * destroyed. * @see #contextDestroyed() */ void servletDestroyed(); /** * Sometimes we need to create a bean as a one-off object and have it * injected with settings by the container. * This does not make the object part of the container. * @param type The type to get an instance of */ <T> T newInstance(Class<T> type) throws InstantiationException, IllegalAccessException; /** * Sometimes we need to take a bean not created by the container, and inject * it with the data that it would contain if it was created by the * container. * This does not make the object part of the container. * @param object The object to inject. * @deprecated */ @Deprecated void initializeBean(Object object); }