diff --git a/build.gradle b/build.gradle index 3e427eae97..42756f47cc 100644 --- a/build.gradle +++ b/build.gradle @@ -439,7 +439,6 @@ project("spring-beans") { compile(project(":spring-core")) compile(files(project(":spring-core").cglibRepackJar)) optional("javax.inject:javax.inject:1") - optional("javax.el:javax.el-api:${elApiVersion}") optional("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}") optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}") optional("org.yaml:snakeyaml:${snakeyamlVersion}") @@ -722,7 +721,6 @@ project("spring-context-indexer") { project("spring-web") { description = "Spring Web" - apply plugin: "groovy" dependencies { diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/access/BeanFactoryLocator.java b/spring-beans/src/main/java/org/springframework/beans/factory/access/BeanFactoryLocator.java deleted file mode 100644 index 57d4877bf5..0000000000 --- a/spring-beans/src/main/java/org/springframework/beans/factory/access/BeanFactoryLocator.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2002-2016 the original author or authors. - * - * 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.springframework.beans.factory.access; - -import org.springframework.beans.BeansException; - -/** - * Defines a contract for the lookup, use, and release of a - * {@link org.springframework.beans.factory.BeanFactory}, - * or a {@code BeanFactory} subclass such as an - * {@link org.springframework.context.ApplicationContext}. - * - *
Where this interface is implemented as a singleton class such as - * {@link SingletonBeanFactoryLocator}, the Spring team strongly - * suggests that it be used sparingly and with caution. By far the vast majority - * of the code inside an application is best written in a Dependency Injection - * style, where that code is served out of a - * {@code BeanFactory}/{@code ApplicationContext} container, and has - * its own dependencies supplied by the container when it is created. However, - * even such a singleton implementation sometimes has its use in the small glue - * layers of code that is sometimes needed to tie other code together. For - * example, third party code may try to construct new objects directly, without - * the ability to force it to get these objects out of a {@code BeanFactory}. - * If the object constructed by the third party code is just a small stub or - * proxy, which then uses an implementation of this class to get a - * {@code BeanFactory} from which it gets the real object, to which it - * delegates, then proper Dependency Injection has been achieved. - * - *
As another example, in a complex Java EE app with multiple layers, with - * each layer having its own {@code ApplicationContext} definition (in a - * hierarchy), a class like {@code SingletonBeanFactoryLocator} may be used - * to demand load these contexts. - * - * @author Colin Sampaleanu - * @see org.springframework.beans.factory.BeanFactory - * @see org.springframework.context.access.DefaultLocatorFactory - * @see org.springframework.context.ApplicationContext - */ -public interface BeanFactoryLocator { - - /** - * Use the {@link org.springframework.beans.factory.BeanFactory} (or derived - * interface such as {@link org.springframework.context.ApplicationContext}) - * specified by the {@code factoryKey} parameter. - *
The definition is possibly loaded/created as needed. - * @param factoryKey a resource name specifying which {@code BeanFactory} the - * {@code BeanFactoryLocator} must return for usage. The actual meaning of the - * resource name is specific to the implementation of {@code BeanFactoryLocator}. - * @return the {@code BeanFactory} instance, wrapped as a {@link BeanFactoryReference} object - * @throws BeansException if there is an error loading or accessing the {@code BeanFactory} - */ - BeanFactoryReference useBeanFactory(String factoryKey) throws BeansException; - -} diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/access/BeanFactoryReference.java b/spring-beans/src/main/java/org/springframework/beans/factory/access/BeanFactoryReference.java deleted file mode 100644 index c2c0a7c629..0000000000 --- a/spring-beans/src/main/java/org/springframework/beans/factory/access/BeanFactoryReference.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * 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.springframework.beans.factory.access; - -import org.springframework.beans.factory.BeanFactory; - -/** - * Used to track a reference to a {@link BeanFactory} obtained through - * a {@link BeanFactoryLocator}. - * - *
It is safe to call {@link #release()} multiple times, but - * {@link #getFactory()} must not be called after calling release. - * - * @author Colin Sampaleanu - * @see BeanFactoryLocator - * @see org.springframework.context.access.ContextBeanFactoryReference - */ -public interface BeanFactoryReference { - - /** - * Return the {@link BeanFactory} instance held by this reference. - * @throws IllegalStateException if invoked after {@code release()} has been called - */ - BeanFactory getFactory(); - - /** - * Indicate that the {@link BeanFactory} instance referred to by this object is not - * needed any longer by the client code which obtained the {@link BeanFactoryReference}. - *
Depending on the actual implementation of {@link BeanFactoryLocator}, and - * the actual type of {@code BeanFactory}, this may possibly not actually - * do anything; alternately in the case of a 'closeable' {@code BeanFactory} - * or derived class (such as {@link org.springframework.context.ApplicationContext}) - * may 'close' it, or may 'close' it once no more references remain. - *
In an EJB usage scenario this would normally be called from - * {@code ejbRemove()} and {@code ejbPassivate()}. - *
This is safe to call multiple times. - * @see BeanFactoryLocator - * @see org.springframework.context.access.ContextBeanFactoryReference - * @see org.springframework.context.ConfigurableApplicationContext#close() - */ - void release(); - -} diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/access/BootstrapException.java b/spring-beans/src/main/java/org/springframework/beans/factory/access/BootstrapException.java deleted file mode 100644 index d2a72bc368..0000000000 --- a/spring-beans/src/main/java/org/springframework/beans/factory/access/BootstrapException.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * 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.springframework.beans.factory.access; - -import org.springframework.beans.FatalBeanException; - -/** - * Exception thrown if a bean factory could not be loaded by a bootstrap class. - * - * @author Rod Johnson - * @since 02.12.2002 - */ -@SuppressWarnings("serial") -public class BootstrapException extends FatalBeanException { - - /** - * Create a new BootstrapException with the specified message. - * @param msg the detail message - */ - public BootstrapException(String msg) { - super(msg); - } - - /** - * Create a new BootstrapException with the specified message - * and root cause. - * @param msg the detail message - * @param cause the root cause - */ - public BootstrapException(String msg, Throwable cause) { - super(msg, cause); - } - -} diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/access/SingletonBeanFactoryLocator.java b/spring-beans/src/main/java/org/springframework/beans/factory/access/SingletonBeanFactoryLocator.java deleted file mode 100644 index 5a52103927..0000000000 --- a/spring-beans/src/main/java/org/springframework/beans/factory/access/SingletonBeanFactoryLocator.java +++ /dev/null @@ -1,536 +0,0 @@ -/* - * Copyright 2002-2016 the original author or authors. - * - * 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.springframework.beans.factory.access; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.beans.BeansException; -import org.springframework.beans.FatalBeanException; -import org.springframework.beans.factory.BeanDefinitionStoreException; -import org.springframework.beans.factory.BeanFactory; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.beans.factory.support.DefaultListableBeanFactory; -import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -import org.springframework.core.io.support.ResourcePatternResolver; -import org.springframework.core.io.support.ResourcePatternUtils; - -/** - *
Keyed-singleton implementation of {@link BeanFactoryLocator}, - * which accesses shared Spring {@link BeanFactory} instances.
- * - *Please see the warning in BeanFactoryLocator's javadoc about appropriate usage - * of singleton style BeanFactoryLocator implementations. It is the opinion of the - * Spring team that the use of this class and similar classes is unnecessary except - * (sometimes) for a small amount of glue code. Excessive usage will lead to code - * that is more tightly coupled, and harder to modify or test.
- * - *In this implementation, a BeanFactory is built up from one or more XML - * definition file fragments, accessed as resources. The default resource name - * searched for is 'classpath*:beanRefFactory.xml', with the Spring-standard - * 'classpath*:' prefix ensuring that if the classpath contains multiple copies - * of this file (perhaps one in each component jar) they will be combined. To - * override the default resource name, instead of using the no-arg - * {@link #getInstance()} method, use the {@link #getInstance(String selector)} - * variant, which will treat the 'selector' argument as the resource name to - * search for.
- * - *The purpose of this 'outer' BeanFactory is to create and hold a copy of one - * or more 'inner' BeanFactory or ApplicationContext instances, and allow those - * to be obtained either directly or via an alias. As such, this class provides - * both singleton style access to one or more BeanFactories/ApplicationContexts, - * and also a level of indirection, allowing multiple pieces of code, which are - * not able to work in a Dependency Injection fashion, to refer to and use the - * same target BeanFactory/ApplicationContext instance(s), by different names.
- * - *
Consider an example application scenario: - * - *
In an ideal scenario, these would be combined to create one ApplicationContext, - * or created as three hierarchical ApplicationContexts, by one piece of code - * somewhere at application startup (perhaps a Servlet filter), from which all other - * code in the application would flow, obtained as beans from the context(s). However - * when third party code enters into the picture, things can get problematic. If the - * third party code needs to create user classes, which should normally be obtained - * from a Spring BeanFactory/ApplicationContext, but can handle only newInstance() - * style object creation, then some extra work is required to actually access and - * use object from a BeanFactory/ApplicationContext. One solutions is to make the - * class created by the third party code be just a stub or proxy, which gets the - * real object from a BeanFactory/ApplicationContext, and delegates to it. However, - * it is not normally workable for the stub to create the BeanFactory on each - * use, as depending on what is inside it, that can be an expensive operation. - * Additionally, there is a fairly tight coupling between the stub and the name of - * the definition resource for the BeanFactory/ApplicationContext. This is where - * SingletonBeanFactoryLocator comes in. The stub can obtain a - * SingletonBeanFactoryLocator instance, which is effectively a singleton, and - * ask it for an appropriate BeanFactory. A subsequent invocation (assuming the - * same class loader is involved) by the stub or another piece of code, will obtain - * the same instance. The simple aliasing mechanism allows the context to be asked - * for by a name which is appropriate for (or describes) the user. The deployer can - * match alias names to actual context names. - * - *
Another use of SingletonBeanFactoryLocator, is to demand-load/use one or more - * BeanFactories/ApplicationContexts. Because the definition can contain one of more - * BeanFactories/ApplicationContexts, which can be independent or in a hierarchy, if - * they are set to lazy-initialize, they will only be created when actually requested - * for use. - * - *
Given the above-mentioned three ApplicationContexts, consider the simplest - * SingletonBeanFactoryLocator usage scenario, where there is only one single - * {@code beanRefFactory.xml} definition file: - * - *
<?xml version="1.0" encoding="UTF-8"?> - * <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> - * - * <beans> - * - * <bean id="com.mycompany.myapp" - * class="org.springframework.context.support.ClassPathXmlApplicationContext"> - * <constructor-arg> - * <list> - * <value>com/mycompany/myapp/util/applicationContext.xml</value> - * <value>com/mycompany/myapp/dataaccess/applicationContext.xml</value> - * <value>com/mycompany/myapp/dataaccess/services.xml</value> - * </list> - * </constructor-arg> - * </bean> - * - * </beans> - *- * - * The client code is as simple as: - * - *
- * BeanFactoryLocator bfl = SingletonBeanFactoryLocator.getInstance();
- * BeanFactoryReference bf = bfl.useBeanFactory("com.mycompany.myapp");
- * // now use some bean from factory
- * MyClass zed = bf.getFactory().getBean("mybean");
- *
- *
- * Another relatively simple variation of the {@code beanRefFactory.xml} definition file could be:
- *
- * <?xml version="1.0" encoding="UTF-8"?> - * <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> - * - * <beans> - * - * <bean id="com.mycompany.myapp.util" lazy-init="true" - * class="org.springframework.context.support.ClassPathXmlApplicationContext"> - * <constructor-arg> - * <value>com/mycompany/myapp/util/applicationContext.xml</value> - * </constructor-arg> - * </bean> - * - * <!-- child of above --> - * <bean id="com.mycompany.myapp.dataaccess" lazy-init="true" - * class="org.springframework.context.support.ClassPathXmlApplicationContext"> - * <constructor-arg> - * <list><value>com/mycompany/myapp/dataaccess/applicationContext.xml</value></list> - * </constructor-arg> - * <constructor-arg> - * <ref bean="com.mycompany.myapp.util"/> - * </constructor-arg> - * </bean> - * - * <!-- child of above --> - * <bean id="com.mycompany.myapp.services" lazy-init="true" - * class="org.springframework.context.support.ClassPathXmlApplicationContext"> - * <constructor-arg> - * <list><value>com/mycompany/myapp/dataaccess.services.xml</value></value> - * </constructor-arg> - * <constructor-arg> - * <ref bean="com.mycompany.myapp.dataaccess"/> - * </constructor-arg> - * </bean> - * - * <!-- define an alias --> - * <bean id="com.mycompany.myapp.mypackage" - * class="java.lang.String"> - * <constructor-arg> - * <value>com.mycompany.myapp.services</value> - * </constructor-arg> - * </bean> - * - * </beans> - *- * - *
In this example, there is a hierarchy of three contexts created. The (potential) - * advantage is that if the lazy flag is set to true, a context will only be created - * if it's actually used. If there is some code that is only needed some of the time, - * this mechanism can save some resources. Additionally, an alias to the last context - * has been created. Aliases allow usage of the idiom where client code asks for a - * context with an id which represents the package or module the code is in, and the - * actual definition file(s) for the SingletonBeanFactoryLocator maps that id to - * a real context id. - * - *
A final example is more complex, with a {@code beanRefFactory.xml} for every module. - * All the files are automatically combined to create the final definition. - * - *
{@code beanRefFactory.xml} file inside jar for util module: - * - *
<?xml version="1.0" encoding="UTF-8"?> - * <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> - * - * <beans> - * <bean id="com.mycompany.myapp.util" lazy-init="true" - * class="org.springframework.context.support.ClassPathXmlApplicationContext"> - * <constructor-arg> - * <value>com/mycompany/myapp/util/applicationContext.xml</value> - * </constructor-arg> - * </bean> - * </beans> - *- * - * {@code beanRefFactory.xml} file inside jar for data-access module:
<?xml version="1.0" encoding="UTF-8"?> - * <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> - * - * <beans> - * <!-- child of util --> - * <bean id="com.mycompany.myapp.dataaccess" lazy-init="true" - * class="org.springframework.context.support.ClassPathXmlApplicationContext"> - * <constructor-arg> - * <list><value>com/mycompany/myapp/dataaccess/applicationContext.xml</value></list> - * </constructor-arg> - * <constructor-arg> - * <ref bean="com.mycompany.myapp.util"/> - * </constructor-arg> - * </bean> - * </beans> - *- * - * {@code beanRefFactory.xml} file inside jar for services module: - * - *
<?xml version="1.0" encoding="UTF-8"?> - * <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> - * - * <beans> - * <!-- child of data-access --> - * <bean id="com.mycompany.myapp.services" lazy-init="true" - * class="org.springframework.context.support.ClassPathXmlApplicationContext"> - * <constructor-arg> - * <list><value>com/mycompany/myapp/dataaccess/services.xml</value></list> - * </constructor-arg> - * <constructor-arg> - * <ref bean="com.mycompany.myapp.dataaccess"/> - * </constructor-arg> - * </bean> - * </beans> - *- * - * {@code beanRefFactory.xml} file inside jar for mypackage module. This doesn't - * create any of its own contexts, but allows the other ones to be referred to be - * a name known to this module: - * - *
<?xml version="1.0" encoding="UTF-8"?> - * <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> - * - * <beans> - * <!-- define an alias for "com.mycompany.myapp.services" --> - * <alias name="com.mycompany.myapp.services" alias="com.mycompany.myapp.mypackage"/> - * </beans> - *- * - * @author Colin Sampaleanu - * @author Juergen Hoeller - * @see org.springframework.context.access.ContextSingletonBeanFactoryLocator - * @see org.springframework.context.access.DefaultLocatorFactory - */ -public class SingletonBeanFactoryLocator implements BeanFactoryLocator { - - private static final String DEFAULT_RESOURCE_LOCATION = "classpath*:beanRefFactory.xml"; - - protected static final Log logger = LogFactory.getLog(SingletonBeanFactoryLocator.class); - - /** The keyed BeanFactory instances */ - private static final Map
The default implementation simply builds a - * {@link org.springframework.beans.factory.support.DefaultListableBeanFactory} - * and populates it using an - * {@link org.springframework.beans.factory.xml.XmlBeanDefinitionReader}. - *
This method should not instantiate any singletons. That function is performed
- * by {@link #initializeDefinition initializeDefinition()}, which should also be
- * overridden if this method is.
- * @param resourceLocation the resource location for this factory group
- * @param factoryKey the bean name of the factory to obtain
- * @return the corresponding BeanFactory reference
- */
- protected BeanFactory createDefinition(String resourceLocation, String factoryKey) {
- DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
- XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
- ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
-
- try {
- Resource[] configResources = resourcePatternResolver.getResources(resourceLocation);
- if (configResources.length == 0) {
- throw new FatalBeanException("Unable to find resource for specified definition. " +
- "Group resource name [" + this.resourceLocation + "], factory key [" + factoryKey + "]");
- }
- reader.loadBeanDefinitions(configResources);
- }
- catch (IOException ex) {
- throw new BeanDefinitionStoreException(
- "Error accessing bean definition resource [" + this.resourceLocation + "]", ex);
- }
- catch (BeanDefinitionStoreException ex) {
- throw new FatalBeanException("Unable to load group definition: " +
- "group resource name [" + this.resourceLocation + "], factory key [" + factoryKey + "]", ex);
- }
-
- return factory;
- }
-
- /**
- * Instantiate singletons and do any other normal initialization of the factory.
- * Subclasses that override {@link #createDefinition createDefinition()} should
- * also override this method.
- * @param groupDef the factory returned by {@link #createDefinition createDefinition()}
- */
- protected void initializeDefinition(BeanFactory groupDef) {
- if (groupDef instanceof ConfigurableListableBeanFactory) {
- ((ConfigurableListableBeanFactory) groupDef).preInstantiateSingletons();
- }
- }
-
- /**
- * Destroy definition in separate method so subclass may work with other definition types.
- * @param groupDef the factory returned by {@link #createDefinition createDefinition()}
- * @param selector the resource location for this factory group
- */
- protected void destroyDefinition(BeanFactory groupDef, String selector) {
- if (groupDef instanceof ConfigurableBeanFactory) {
- if (logger.isTraceEnabled()) {
- logger.trace("Factory group with selector '" + selector +
- "' being released, as there are no more references to it");
- }
- ((ConfigurableBeanFactory) groupDef).destroySingletons();
- }
- }
-
-
- /**
- * We track BeanFactory instances with this class.
- */
- private static class BeanFactoryGroup {
-
- private BeanFactory definition;
-
- private int refCount = 0;
- }
-
-
- /**
- * BeanFactoryReference implementation for this locator.
- */
- private class CountingBeanFactoryReference implements BeanFactoryReference {
-
- private BeanFactory beanFactory;
-
- private BeanFactory groupContextRef;
-
- public CountingBeanFactoryReference(BeanFactory beanFactory, BeanFactory groupContext) {
- this.beanFactory = beanFactory;
- this.groupContextRef = groupContext;
- }
-
- @Override
- public BeanFactory getFactory() {
- return this.beanFactory;
- }
-
- // Note that it's legal to call release more than once!
- @Override
- public void release() throws FatalBeanException {
- synchronized (bfgInstancesByKey) {
- BeanFactory savedRef = this.groupContextRef;
- if (savedRef != null) {
- this.groupContextRef = null;
- BeanFactoryGroup bfg = bfgInstancesByObj.get(savedRef);
- if (bfg != null) {
- bfg.refCount--;
- if (bfg.refCount == 0) {
- destroyDefinition(savedRef, resourceLocation);
- bfgInstancesByKey.remove(resourceLocation);
- bfgInstancesByObj.remove(savedRef);
- }
- }
- else {
- // This should be impossible.
- logger.warn("Tried to release a SingletonBeanFactoryLocator group definition " +
- "more times than it has actually been used. Resource name [" + resourceLocation + "]");
- }
- }
- }
- }
- }
-
-}
diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/access/el/SimpleSpringBeanELResolver.java b/spring-beans/src/main/java/org/springframework/beans/factory/access/el/SimpleSpringBeanELResolver.java
deleted file mode 100644
index 631f08c56e..0000000000
--- a/spring-beans/src/main/java/org/springframework/beans/factory/access/el/SimpleSpringBeanELResolver.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2002-2008 the original author or authors.
- *
- * 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.springframework.beans.factory.access.el;
-
-import javax.el.ELContext;
-
-import org.springframework.beans.factory.BeanFactory;
-import org.springframework.util.Assert;
-
-/**
- * Simple concrete variant of {@link SpringBeanELResolver}, delegating
- * to a given {@link BeanFactory} that the resolver was constructed with.
- *
- * @author Juergen Hoeller
- * @since 2.5.2
- */
-public class SimpleSpringBeanELResolver extends SpringBeanELResolver {
-
- private final BeanFactory beanFactory;
-
-
- /**
- * Create a new SimpleSpringBeanELResolver for the given BeanFactory.
- * @param beanFactory the Spring BeanFactory to delegate to
- */
- public SimpleSpringBeanELResolver(BeanFactory beanFactory) {
- Assert.notNull(beanFactory, "BeanFactory must not be null");
- this.beanFactory = beanFactory;
- }
-
- @Override
- protected BeanFactory getBeanFactory(ELContext elContext) {
- return this.beanFactory;
- }
-
-}
diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/access/el/SpringBeanELResolver.java b/spring-beans/src/main/java/org/springframework/beans/factory/access/el/SpringBeanELResolver.java
deleted file mode 100644
index b2be5132c5..0000000000
--- a/spring-beans/src/main/java/org/springframework/beans/factory/access/el/SpringBeanELResolver.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright 2002-2014 the original author or authors.
- *
- * 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.springframework.beans.factory.access.el;
-
-import java.beans.FeatureDescriptor;
-import java.util.Iterator;
-import javax.el.ELContext;
-import javax.el.ELException;
-import javax.el.ELResolver;
-import javax.el.PropertyNotWritableException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.beans.factory.BeanFactory;
-
-/**
- * Unified EL {@code ELResolver} that delegates to a Spring BeanFactory,
- * resolving name references to Spring-defined beans.
- *
- * @author Juergen Hoeller
- * @since 2.5.2
- * @see org.springframework.web.jsf.el.SpringBeanFacesELResolver
- */
-public abstract class SpringBeanELResolver extends ELResolver {
-
- /** Logger available to subclasses */
- protected final Log logger = LogFactory.getLog(getClass());
-
-
- @Override
- public Object getValue(ELContext elContext, Object base, Object property) throws ELException {
- if (base == null) {
- String beanName = property.toString();
- BeanFactory bf = getBeanFactory(elContext);
- if (bf.containsBean(beanName)) {
- if (logger.isTraceEnabled()) {
- logger.trace("Successfully resolved variable '" + beanName + "' in Spring BeanFactory");
- }
- elContext.setPropertyResolved(true);
- return bf.getBean(beanName);
- }
- }
- return null;
- }
-
- @Override
- public Class> getType(ELContext elContext, Object base, Object property) throws ELException {
- if (base == null) {
- String beanName = property.toString();
- BeanFactory bf = getBeanFactory(elContext);
- if (bf.containsBean(beanName)) {
- elContext.setPropertyResolved(true);
- return bf.getType(beanName);
- }
- }
- return null;
- }
-
- @Override
- public void setValue(ELContext elContext, Object base, Object property, Object value) throws ELException {
- if (base == null) {
- String beanName = property.toString();
- BeanFactory bf = getBeanFactory(elContext);
- if (bf.containsBean(beanName)) {
- if (value == bf.getBean(beanName)) {
- // Setting the bean reference to the same value is alright - can simply be ignored...
- elContext.setPropertyResolved(true);
- }
- else {
- throw new PropertyNotWritableException(
- "Variable '" + beanName + "' refers to a Spring bean which by definition is not writable");
- }
- }
- }
- }
-
- @Override
- public boolean isReadOnly(ELContext elContext, Object base, Object property) throws ELException {
- if (base == null) {
- String beanName = property.toString();
- BeanFactory bf = getBeanFactory(elContext);
- if (bf.containsBean(beanName)) {
- return true;
- }
- }
- return false;
- }
-
- @Override
- public Iterator Note: This package is only relevant for special sharing of bean
- * factories, for example behind EJB facades. It is not used in a
- * typical web application or standalone application.
- */
-package org.springframework.beans.factory.access;
diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/access/SingletonBeanFactoryLocatorTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/access/SingletonBeanFactoryLocatorTests.java
deleted file mode 100644
index 6221e554bd..0000000000
--- a/spring-beans/src/test/java/org/springframework/beans/factory/access/SingletonBeanFactoryLocatorTests.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright 2002-2012 the original author or authors.
- *
- * 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.springframework.beans.factory.access;
-
-import java.util.List;
-
-import org.junit.Test;
-
-import org.springframework.beans.factory.BeanFactory;
-import org.springframework.util.ClassUtils;
-
-import static org.junit.Assert.*;
-
-/**
- * Unit tests for {@link SingletonBeanFactoryLocator}.
- *
- * @author Colin Sampaleanu
- * @author Chris Beams
- */
-public class SingletonBeanFactoryLocatorTests {
- private static final Class> CLASS = SingletonBeanFactoryLocatorTests.class;
- private static final String REF1_XML = CLASS.getSimpleName() + "-ref1.xml";
-
- @Test
- public void testBasicFunctionality() {
- SingletonBeanFactoryLocator facLoc = new SingletonBeanFactoryLocator(
- "classpath*:" + ClassUtils.addResourcePathToPackagePath(CLASS, REF1_XML));
-
- basicFunctionalityTest(facLoc);
- }
-
- /**
- * Worker method so subclass can use it too.
- */
- protected void basicFunctionalityTest(SingletonBeanFactoryLocator facLoc) {
- BeanFactoryReference bfr = facLoc.useBeanFactory("a.qualified.name.of.some.sort");
- BeanFactory fac = bfr.getFactory();
- BeanFactoryReference bfr2 = facLoc.useBeanFactory("another.qualified.name");
- fac = bfr2.getFactory();
- // verify that the same instance is returned
- TestBean tb = (TestBean) fac.getBean("beans1.bean1");
- assertTrue(tb.getName().equals("beans1.bean1"));
- tb.setName("was beans1.bean1");
- BeanFactoryReference bfr3 = facLoc.useBeanFactory("another.qualified.name");
- fac = bfr3.getFactory();
- tb = (TestBean) fac.getBean("beans1.bean1");
- assertTrue(tb.getName().equals("was beans1.bean1"));
- BeanFactoryReference bfr4 = facLoc.useBeanFactory("a.qualified.name.which.is.an.alias");
- fac = bfr4.getFactory();
- tb = (TestBean) fac.getBean("beans1.bean1");
- assertTrue(tb.getName().equals("was beans1.bean1"));
- // Now verify that we can call release in any order.
- // Unfortunately this doesn't validate complete release after the last one.
- bfr2.release();
- bfr3.release();
- bfr.release();
- bfr4.release();
- }
-
- /**
- * This test can run multiple times, but due to static keyed lookup of the locators,
- * 2nd and subsequent calls will actuall get back same locator instance. This is not
- * an issue really, since the contained beanfactories will still be loaded and released.
- */
- @Test
- public void testGetInstance() {
- // Try with and without 'classpath*:' prefix, and with 'classpath:' prefix.
- BeanFactoryLocator facLoc = SingletonBeanFactoryLocator.getInstance(
- ClassUtils.addResourcePathToPackagePath(CLASS, REF1_XML));
- getInstanceTest1(facLoc);
-
- facLoc = SingletonBeanFactoryLocator.getInstance(
- "classpath*:/" + ClassUtils.addResourcePathToPackagePath(CLASS, REF1_XML));
- getInstanceTest2(facLoc);
-
- // This will actually get another locator instance, as the key is the resource name.
- facLoc = SingletonBeanFactoryLocator.getInstance(
- "classpath:" + ClassUtils.addResourcePathToPackagePath(CLASS, REF1_XML));
- getInstanceTest3(facLoc);
-
- }
-
- /**
- * Worker method so subclass can use it too
- */
- protected void getInstanceTest1(BeanFactoryLocator facLoc) {
- BeanFactoryReference bfr = facLoc.useBeanFactory("a.qualified.name.of.some.sort");
- BeanFactory fac = bfr.getFactory();
- BeanFactoryReference bfr2 = facLoc.useBeanFactory("another.qualified.name");
- fac = bfr2.getFactory();
- // verify that the same instance is returned
- TestBean tb = (TestBean) fac.getBean("beans1.bean1");
- assertTrue(tb.getName().equals("beans1.bean1"));
- tb.setName("was beans1.bean1");
- BeanFactoryReference bfr3 = facLoc.useBeanFactory("another.qualified.name");
- fac = bfr3.getFactory();
- tb = (TestBean) fac.getBean("beans1.bean1");
- assertTrue(tb.getName().equals("was beans1.bean1"));
-
- BeanFactoryReference bfr4 = facLoc.useBeanFactory("a.qualified.name.which.is.an.alias");
- fac = bfr4.getFactory();
- tb = (TestBean) fac.getBean("beans1.bean1");
- assertTrue(tb.getName().equals("was beans1.bean1"));
-
- bfr.release();
- bfr3.release();
- bfr2.release();
- bfr4.release();
- }
-
- /**
- * Worker method so subclass can use it too
- */
- protected void getInstanceTest2(BeanFactoryLocator facLoc) {
- BeanFactoryReference bfr;
- BeanFactory fac;
- BeanFactoryReference bfr2;
- TestBean tb;
- BeanFactoryReference bfr3;
- BeanFactoryReference bfr4;
- bfr = facLoc.useBeanFactory("a.qualified.name.of.some.sort");
- fac = bfr.getFactory();
- bfr2 = facLoc.useBeanFactory("another.qualified.name");
- fac = bfr2.getFactory();
- // verify that the same instance is returned
- tb = (TestBean) fac.getBean("beans1.bean1");
- assertTrue(tb.getName().equals("beans1.bean1"));
- tb.setName("was beans1.bean1");
- bfr3 = facLoc.useBeanFactory("another.qualified.name");
- fac = bfr3.getFactory();
- tb = (TestBean) fac.getBean("beans1.bean1");
- assertTrue(tb.getName().equals("was beans1.bean1"));
- bfr4 = facLoc.useBeanFactory("a.qualified.name.which.is.an.alias");
- fac = bfr4.getFactory();
- tb = (TestBean) fac.getBean("beans1.bean1");
- assertTrue(tb.getName().equals("was beans1.bean1"));
- bfr.release();
- bfr2.release();
- bfr4.release();
- bfr3.release();
- }
-
- /**
- * Worker method so subclass can use it too
- */
- protected void getInstanceTest3(BeanFactoryLocator facLoc) {
- BeanFactoryReference bfr;
- BeanFactory fac;
- BeanFactoryReference bfr2;
- TestBean tb;
- BeanFactoryReference bfr3;
- BeanFactoryReference bfr4;
- bfr = facLoc.useBeanFactory("a.qualified.name.of.some.sort");
- fac = bfr.getFactory();
- bfr2 = facLoc.useBeanFactory("another.qualified.name");
- fac = bfr2.getFactory();
- // verify that the same instance is returned
- tb = (TestBean) fac.getBean("beans1.bean1");
- assertTrue(tb.getName().equals("beans1.bean1"));
- tb.setName("was beans1.bean1");
- bfr3 = facLoc.useBeanFactory("another.qualified.name");
- fac = bfr3.getFactory();
- tb = (TestBean) fac.getBean("beans1.bean1");
- assertTrue(tb.getName().equals("was beans1.bean1"));
- bfr4 = facLoc.useBeanFactory("a.qualified.name.which.is.an.alias");
- fac = bfr4.getFactory();
- tb = (TestBean) fac.getBean("beans1.bean1");
- assertTrue(tb.getName().equals("was beans1.bean1"));
- bfr4.release();
- bfr3.release();
- bfr2.release();
- bfr.release();
- }
-
-}
-
-
-class TestBean {
-
- private String name;
-
- private List> list;
-
- private Object objRef;
-
- /**
- * @return Returns the name.
- */
- public String getName() {
- return name;
- }
-
- /**
- * @param name The name to set.
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * @return Returns the list.
- */
- public List> getList() {
- return list;
- }
-
- /**
- * @param list The list to set.
- */
- public void setList(List> list) {
- this.list = list;
- }
-
- /**
- * @return Returns the object.
- */
- public Object getObjRef() {
- return objRef;
- }
-
- /**
- * @param object The object to set.
- */
- public void setObjRef(Object object) {
- this.objRef = object;
- }
-}
diff --git a/spring-beans/src/test/resources/org/springframework/beans/factory/access/SingletonBeanFactoryLocatorTests-beans1.xml b/spring-beans/src/test/resources/org/springframework/beans/factory/access/SingletonBeanFactoryLocatorTests-beans1.xml
deleted file mode 100644
index 3fc565ba81..0000000000
--- a/spring-beans/src/test/resources/org/springframework/beans/factory/access/SingletonBeanFactoryLocatorTests-beans1.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
- As per BeanFactoryReference contract, {@code release} may be called
- * more than once, with subsequent calls not doing anything. However, calling
- * {@code getFactory} after a {@code release} call will cause an exception.
- *
- * @author Juergen Hoeller
- * @author Colin Sampaleanu
- * @since 13.02.2004
- * @see org.springframework.context.ConfigurableApplicationContext#close
- */
-public class ContextBeanFactoryReference implements BeanFactoryReference {
-
- private ApplicationContext applicationContext;
-
-
- /**
- * Create a new ContextBeanFactoryReference for the given context.
- * @param applicationContext the ApplicationContext to wrap
- */
- public ContextBeanFactoryReference(ApplicationContext applicationContext) {
- this.applicationContext = applicationContext;
- }
-
-
- @Override
- public BeanFactory getFactory() {
- if (this.applicationContext == null) {
- throw new IllegalStateException(
- "ApplicationContext owned by this BeanFactoryReference has been released");
- }
- return this.applicationContext;
- }
-
- @Override
- public void release() {
- if (this.applicationContext != null) {
- ApplicationContext savedCtx;
-
- // We don't actually guarantee thread-safety, but it's not a lot of extra work.
- synchronized (this) {
- savedCtx = this.applicationContext;
- this.applicationContext = null;
- }
-
- if (savedCtx != null && savedCtx instanceof ConfigurableApplicationContext) {
- ((ConfigurableApplicationContext) savedCtx).close();
- }
- }
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/context/access/ContextJndiBeanFactoryLocator.java b/spring-context/src/main/java/org/springframework/context/access/ContextJndiBeanFactoryLocator.java
deleted file mode 100644
index fe9493824b..0000000000
--- a/spring-context/src/main/java/org/springframework/context/access/ContextJndiBeanFactoryLocator.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2002-2012 the original author or authors.
- *
- * 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.springframework.context.access;
-
-import javax.naming.NamingException;
-
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.access.BeanFactoryLocator;
-import org.springframework.beans.factory.access.BeanFactoryReference;
-import org.springframework.beans.factory.access.BootstrapException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-import org.springframework.jndi.JndiLocatorSupport;
-import org.springframework.util.StringUtils;
-
-/**
- * BeanFactoryLocator implementation that creates the BeanFactory from one or
- * more classpath locations specified in a JNDI environment variable.
- *
- * This default implementation creates a
- * {@link org.springframework.context.support.ClassPathXmlApplicationContext}.
- * Subclasses may override {@link #createBeanFactory} for custom instantiation.
- *
- * @author Colin Sampaleanu
- * @author Juergen Hoeller
- * @see #createBeanFactory
- */
-public class ContextJndiBeanFactoryLocator extends JndiLocatorSupport implements BeanFactoryLocator {
-
- /**
- * Any number of these characters are considered delimiters between
- * multiple bean factory config paths in a single String value.
- */
- public static final String BEAN_FACTORY_PATH_DELIMITERS = ",; \t\n";
-
-
- /**
- * Load/use a bean factory, as specified by a factory key which is a JNDI
- * address, of the form {@code java:comp/env/ejb/BeanFactoryPath}. The
- * contents of this JNDI location must be a string containing one or more
- * classpath resource names (separated by any of the delimiters '{@code ,; \t\n}'
- * if there is more than one. The resulting BeanFactory (or ApplicationContext)
- * will be created from the combined resources.
- * @see #createBeanFactory
- */
- @Override
- public BeanFactoryReference useBeanFactory(String factoryKey) throws BeansException {
- try {
- String beanFactoryPath = lookup(factoryKey, String.class);
- if (logger.isTraceEnabled()) {
- logger.trace("Bean factory path from JNDI environment variable [" + factoryKey +
- "] is: " + beanFactoryPath);
- }
- String[] paths = StringUtils.tokenizeToStringArray(beanFactoryPath, BEAN_FACTORY_PATH_DELIMITERS);
- return createBeanFactory(paths);
- }
- catch (NamingException ex) {
- throw new BootstrapException("Define an environment variable [" + factoryKey + "] containing " +
- "the class path locations of XML bean definition files", ex);
- }
- }
-
- /**
- * Create the BeanFactory instance, given an array of class path resource Strings
- * which should be combined. This is split out as a separate method so that
- * subclasses can override the actual BeanFactory implementation class.
- * Delegates to {@code createApplicationContext} by default,
- * wrapping the result in a ContextBeanFactoryReference.
- * @param resources an array of Strings representing classpath resource names
- * @return the created BeanFactory, wrapped in a BeanFactoryReference
- * (for example, a ContextBeanFactoryReference wrapping an ApplicationContext)
- * @throws BeansException if factory creation failed
- * @see #createApplicationContext
- * @see ContextBeanFactoryReference
- */
- protected BeanFactoryReference createBeanFactory(String[] resources) throws BeansException {
- ApplicationContext ctx = createApplicationContext(resources);
- return new ContextBeanFactoryReference(ctx);
- }
-
- /**
- * Create the ApplicationContext instance, given an array of class path resource
- * Strings which should be combined
- * @param resources an array of Strings representing classpath resource names
- * @return the created ApplicationContext
- * @throws BeansException if context creation failed
- */
- protected ApplicationContext createApplicationContext(String[] resources) throws BeansException {
- return new ClassPathXmlApplicationContext(resources);
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/context/access/ContextSingletonBeanFactoryLocator.java b/spring-context/src/main/java/org/springframework/context/access/ContextSingletonBeanFactoryLocator.java
deleted file mode 100644
index de025c5ab4..0000000000
--- a/spring-context/src/main/java/org/springframework/context/access/ContextSingletonBeanFactoryLocator.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright 2002-2016 the original author or authors.
- *
- * 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.springframework.context.access;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.BeanFactory;
-import org.springframework.beans.factory.access.BeanFactoryLocator;
-import org.springframework.beans.factory.access.SingletonBeanFactoryLocator;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-import org.springframework.core.io.support.ResourcePatternResolver;
-import org.springframework.core.io.support.ResourcePatternUtils;
-
-/**
- * Variant of {@link org.springframework.beans.factory.access.SingletonBeanFactoryLocator}
- * which creates its internal bean factory reference as an
- * {@link org.springframework.context.ApplicationContext} instead of
- * SingletonBeanFactoryLocator's simple BeanFactory. For almost all usage scenarios,
- * this will not make a difference, since within that ApplicationContext or BeanFactory
- * you are still free to define either BeanFactory or ApplicationContext instances.
- * The main reason one would need to use this class is if bean post-processing
- * (or other ApplicationContext specific features are needed in the bean reference
- * definition itself).
- *
- * Note: This class uses classpath*:beanRefContext.xml
- * as the default resource location for the bean factory reference definition files.
- * It is not possible nor legal to share definitions with SingletonBeanFactoryLocator
- * at the same time.
- *
- * @author Colin Sampaleanu
- * @author Juergen Hoeller
- * @see org.springframework.beans.factory.access.SingletonBeanFactoryLocator
- * @see org.springframework.context.access.DefaultLocatorFactory
- */
-public class ContextSingletonBeanFactoryLocator extends SingletonBeanFactoryLocator {
-
- private static final String DEFAULT_RESOURCE_LOCATION = "classpath*:beanRefContext.xml";
-
- /** The keyed singleton instances */
- private static final Map The default implementation simply builds a
- * {@link org.springframework.context.support.ClassPathXmlApplicationContext}.
- */
- @Override
- protected BeanFactory createDefinition(String resourceLocation, String factoryKey) {
- return new ClassPathXmlApplicationContext(new String[] {resourceLocation}, false);
- }
-
- /**
- * Overrides the default method to refresh the ApplicationContext, invoking
- * {@link ConfigurableApplicationContext#refresh ConfigurableApplicationContext.refresh()}.
- */
- @Override
- protected void initializeDefinition(BeanFactory groupDef) {
- if (groupDef instanceof ConfigurableApplicationContext) {
- ((ConfigurableApplicationContext) groupDef).refresh();
- }
- }
-
- /**
- * Overrides the default method to operate on an ApplicationContext, invoking
- * {@link ConfigurableApplicationContext#refresh ConfigurableApplicationContext.close()}.
- */
- @Override
- protected void destroyDefinition(BeanFactory groupDef, String selector) {
- if (groupDef instanceof ConfigurableApplicationContext) {
- if (logger.isTraceEnabled()) {
- logger.trace("Context group with selector '" + selector +
- "' being released, as there are no more references to it");
- }
- ((ConfigurableApplicationContext) groupDef).close();
- }
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/context/access/DefaultLocatorFactory.java b/spring-context/src/main/java/org/springframework/context/access/DefaultLocatorFactory.java
deleted file mode 100644
index 1ac558f538..0000000000
--- a/spring-context/src/main/java/org/springframework/context/access/DefaultLocatorFactory.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2002-2012 the original author or authors.
- *
- * 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.springframework.context.access;
-
-import org.springframework.beans.FatalBeanException;
-import org.springframework.beans.factory.access.BeanFactoryLocator;
-
-/**
- * A factory class to get a default ContextSingletonBeanFactoryLocator instance.
- *
- * @author Colin Sampaleanu
- * @see org.springframework.context.access.ContextSingletonBeanFactoryLocator
- */
-public class DefaultLocatorFactory {
-
- /**
- * Return an instance object implementing BeanFactoryLocator. This will normally
- * be a singleton instance of the specific ContextSingletonBeanFactoryLocator class,
- * using the default resource selector.
- */
- public static BeanFactoryLocator getInstance() throws FatalBeanException {
- return ContextSingletonBeanFactoryLocator.getInstance();
- }
-
- /**
- * Return an instance object implementing BeanFactoryLocator. This will normally
- * be a singleton instance of the specific ContextSingletonBeanFactoryLocator class,
- * using the specified resource selector.
- * @param selector a selector variable which provides a hint to the factory as to
- * which instance to return.
- */
- public static BeanFactoryLocator getInstance(String selector) throws FatalBeanException {
- return ContextSingletonBeanFactoryLocator.getInstance(selector);
- }
-}
diff --git a/spring-context/src/main/java/org/springframework/context/access/package-info.java b/spring-context/src/main/java/org/springframework/context/access/package-info.java
deleted file mode 100644
index eb45a7288b..0000000000
--- a/spring-context/src/main/java/org/springframework/context/access/package-info.java
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Helper infrastructure to locate and access shared application contexts.
- *
- * Note: This package is only relevant for special sharing of application
- * contexts, for example behind EJB facades. It is not used in a typical
- * web application or standalone application.
- */
-package org.springframework.context.access;
diff --git a/spring-context/src/main/java/org/springframework/ejb/interceptor/SpringBeanAutowiringInterceptor.java b/spring-context/src/main/java/org/springframework/ejb/interceptor/SpringBeanAutowiringInterceptor.java
deleted file mode 100644
index c74b265396..0000000000
--- a/spring-context/src/main/java/org/springframework/ejb/interceptor/SpringBeanAutowiringInterceptor.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright 2002-2016 the original author or authors.
- *
- * 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.springframework.ejb.interceptor;
-
-import java.util.Map;
-import java.util.WeakHashMap;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.ejb.EJBException;
-import javax.ejb.PostActivate;
-import javax.ejb.PrePassivate;
-import javax.interceptor.InvocationContext;
-
-import org.springframework.beans.factory.BeanFactory;
-import org.springframework.beans.factory.access.BeanFactoryLocator;
-import org.springframework.beans.factory.access.BeanFactoryReference;
-import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.access.ContextSingletonBeanFactoryLocator;
-
-/**
- * EJB3-compliant interceptor class that injects Spring beans into
- * fields and methods which are annotated with {@code @Autowired}.
- * Performs injection after construction as well as after activation
- * of a passivated bean.
- *
- * To be applied through an {@code @Interceptors} annotation in
- * the EJB Session Bean or Message-Driven Bean class, or through an
- * {@code interceptor-binding} XML element in the EJB deployment descriptor.
- *
- * Delegates to Spring's {@link AutowiredAnnotationBeanPostProcessor}
- * underneath, allowing for customization of its specific settings through
- * overriding the {@link #configureBeanPostProcessor} template method.
- *
- * The actual BeanFactory to obtain Spring beans from is determined
- * by the {@link #getBeanFactory} template method. The default implementation
- * obtains the Spring {@link ContextSingletonBeanFactoryLocator}, initialized
- * from the default resource location classpath*:beanRefContext.xml,
- * and obtains the single ApplicationContext defined there.
- *
- * NOTE: If you have more than one shared ApplicationContext definition available
- * in your EJB class loader, you need to override the {@link #getBeanFactoryLocatorKey}
- * method and provide a specific locator key for each autowired EJB.
- * Alternatively, override the {@link #getBeanFactory} template method and
- * obtain the target factory explicitly.
- *
- * WARNING: Do not define the same bean as Spring-managed bean and as
- * EJB3 session bean in the same deployment unit. In particular, be
- * careful when using the {@code