666 lines
30 KiB
XML
666 lines
30 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
|
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
|
|
<section id="beans-factory-nature">
|
|
<title>Customizing the nature of a bean</title>
|
|
|
|
<section id="beans-factory-lifecycle">
|
|
<title>Lifecycle callbacks</title>
|
|
|
|
<!-- MLP Beverly to review: Old Text: The Spring Framework provides several callback interfaces to
|
|
change the behavior of your bean in the container; they include -->
|
|
|
|
<para>To interact with the container's management of the bean lifecycle, you
|
|
can implement the Spring <interfacename>InitializingBean</interfacename>
|
|
and <interfacename>DisposableBean</interfacename> interfaces. The
|
|
container calls <methodname>afterPropertiesSet()</methodname> for the
|
|
former and <methodname>destroy()</methodname> for the latter to allow the
|
|
bean to perform certain actions upon initialization and destruction of
|
|
your beans. You can also achieve the same integration with the container
|
|
without coupling your classes to Spring interfaces through the use of
|
|
init-method and destroy method object definition metadata.</para>
|
|
|
|
<para>Internally, the Spring Framework uses
|
|
<interfacename>BeanPostProcessor</interfacename> implementations to
|
|
process any callback interfaces it can find and call the appropriate
|
|
methods. If you need custom features or other lifecycle behavior Spring
|
|
does not offer out-of-the-box, you can implement a
|
|
<interfacename>BeanPostProcessor</interfacename> yourself. For more
|
|
information, see <xref linkend="beans-factory-extension"/>.</para>
|
|
|
|
<para>In addition to the initialization and destruction callbacks,
|
|
Spring-managed objects may also implement the
|
|
<interfacename>Lifecycle</interfacename> interface so that those objects
|
|
can participate in the startup and shutdown process as driven by the
|
|
container's own lifecycle.</para>
|
|
|
|
<para>The lifecycle callback interfaces are described in this
|
|
section.</para>
|
|
|
|
<section id="beans-factory-lifecycle-initializingbean">
|
|
<title>Initialization callbacks</title>
|
|
|
|
<para>The
|
|
<interfacename>org.springframework.beans.factory.InitializingBean</interfacename>
|
|
interface allows a bean to perform initialization work after all
|
|
necessary properties on the bean have been set by the container. The
|
|
<interfacename>InitializingBean</interfacename> interface specifies a
|
|
single method:</para>
|
|
|
|
<programlisting language="java">void afterPropertiesSet() throws Exception;</programlisting>
|
|
|
|
<para>It is recommended that you do not use the
|
|
<interfacename>InitializingBean</interfacename> interface because it
|
|
unnecessarily couples the code to Spring. Alternatively, specify a POJO
|
|
initialization method. In the case of XML-based configuration metadata,
|
|
you use the <literal>init-method</literal> attribute to specify the name
|
|
of the method that has a void no-argument signature. For example, the
|
|
following definition:</para>
|
|
|
|
<programlisting language="xml"><bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/></programlisting>
|
|
|
|
<programlisting language="java">public class ExampleBean {
|
|
|
|
public void init() {
|
|
<lineannotation>// do some initialization work</lineannotation>
|
|
}
|
|
}</programlisting>
|
|
|
|
<para>...is exactly the same as...</para>
|
|
|
|
<programlisting language="xml"><bean id="exampleInitBean" class="examples.AnotherExampleBean"/></programlisting>
|
|
|
|
<programlisting language="java">public class AnotherExampleBean implements InitializingBean {
|
|
|
|
public void afterPropertiesSet() {
|
|
<lineannotation>// do some initialization work</lineannotation>
|
|
}
|
|
}</programlisting>
|
|
|
|
<para>... but does not couple the code to Spring.</para>
|
|
</section>
|
|
|
|
<section id="beans-factory-lifecycle-disposablebean">
|
|
<title>Destruction callbacks</title>
|
|
|
|
<para>Implementing the
|
|
<interfacename>org.springframework.beans.factory.DisposableBean</interfacename>
|
|
interface allows a bean to get a callback when the container containing
|
|
it is destroyed. The <interfacename>DisposableBean</interfacename>
|
|
interface specifies a single method:</para>
|
|
|
|
<programlisting language="java">void destroy() throws Exception;</programlisting>
|
|
|
|
<para>It is recommended that you do not use the
|
|
<interfacename>DisposableBean</interfacename> callback interface because
|
|
it unnecessarily couples the code to Spring. Alternatively, specify a
|
|
generic method that is supported by bean definitions. With XML-based
|
|
configuration metadata, you use the <literal>destroy-method</literal>
|
|
attribute on the <literal><bean/></literal>. For example, the
|
|
following definition:</para>
|
|
|
|
<programlisting language="xml"><bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/></programlisting>
|
|
|
|
<programlisting language="java">public class ExampleBean {
|
|
|
|
public void cleanup() {
|
|
<lineannotation>// do some destruction work (like releasing pooled connections)</lineannotation>
|
|
}
|
|
}</programlisting>
|
|
|
|
<para>...is exactly the same as...</para>
|
|
|
|
<programlisting language="xml"><bean id="exampleInitBean" class="examples.AnotherExampleBean"/></programlisting>
|
|
|
|
<programlisting language="java">public class AnotherExampleBean implements DisposableBean {
|
|
|
|
public void destroy() {
|
|
<lineannotation>// do some destruction work (like releasing pooled connections)</lineannotation>
|
|
}
|
|
}</programlisting>
|
|
|
|
<para>... but does not couple the code to Spring.</para>
|
|
</section>
|
|
|
|
<section id="beans-factory-lifecycle-default-init-destroy-methods">
|
|
<title>Default initialization and destroy methods</title>
|
|
|
|
<para>When you write initialization and destroy method callbacks that do
|
|
not use the Spring-specific
|
|
<interfacename>InitializingBean</interfacename> and
|
|
<interfacename>DisposableBean</interfacename> callback interfaces, you
|
|
typically write methods with names such as <literal>init()</literal>,
|
|
<literal>initialize()</literal>, <literal>dispose()</literal>, and so
|
|
on. Ideally, the names of such lifecycle callback methods are
|
|
standardized across a project so that all developers use the same method
|
|
names and ensure consistency.</para>
|
|
|
|
<para>You can configure the Spring container to <literal>look</literal>
|
|
for named initialization and destroy callback method names on
|
|
<emphasis>every</emphasis> bean. This means that you, as an application
|
|
developer, can write your application classes and use an initialization
|
|
callback called <literal>init()</literal>, without having to configure
|
|
an <literal>init-method="init"</literal> attribute with each bean
|
|
definition. The Spring IoC container calls that method when the bean is
|
|
created (and in accordance with the standard lifecycle callback contract
|
|
described previously). This feature also enforces a consistent naming
|
|
convention for initialization and destroy method callbacks.</para>
|
|
|
|
<para>Suppose that your initialization callback methods are named
|
|
<literal>init()</literal> and destroy callback methods are named
|
|
<literal>destroy()</literal>. Your class will resemble the class in the
|
|
following example.</para>
|
|
|
|
<programlisting language="java">public class DefaultBlogService implements BlogService {
|
|
|
|
private BlogDao blogDao;
|
|
|
|
public void setBlogDao(BlogDao blogDao) {
|
|
this.blogDao = blogDao;
|
|
}
|
|
|
|
<lineannotation>// this is (unsurprisingly) the initialization callback method</lineannotation>
|
|
public void init() {
|
|
if (this.blogDao == null) {
|
|
throw new IllegalStateException("The [blogDao] property must be set.");
|
|
}
|
|
}
|
|
}</programlisting>
|
|
|
|
<programlisting language="xml"><beans <emphasis role="bold">default-init-method="init"</emphasis>>
|
|
|
|
<bean id="blogService" class="com.foo.DefaultBlogService">
|
|
<property name="blogDao" ref="blogDao" />
|
|
</bean>
|
|
|
|
</beans></programlisting>
|
|
|
|
<para>The presence of the <literal>default-init-method</literal> attribute
|
|
on the top-level <literal><beans/></literal> element attribute
|
|
causes the Spring IoC container to recognize a method called
|
|
<literal>init</literal> on beans as the initialization method callback.
|
|
When a bean is created and assembled, if the bean class has such a
|
|
method, it is invoked at the appropriate time.</para>
|
|
|
|
<para>You configure destroy method callbacks similarly (in XML, that is)
|
|
by using the <literal>default-destroy-method</literal> attribute on the
|
|
top-level <literal><beans/></literal> element.</para>
|
|
|
|
<para>Where existing bean classes already have callback methods that are
|
|
named at variance with the convention, you can override the default by
|
|
specifying (in XML, that is) the method name using the
|
|
<literal>init-method</literal> and <literal>destroy-method</literal>
|
|
attributes of the <bean/> itself.</para>
|
|
|
|
<para>The Spring container guarantees that a configured initialization
|
|
callback is called immediately after a bean is supplied with all
|
|
dependencies. Thus the initialization callback is called on the raw bean
|
|
reference, which means that AOP interceptors and so forth are not yet
|
|
applied to the bean. A target bean is fully created
|
|
<emphasis>first</emphasis>, <emphasis>then</emphasis> an AOP proxy (for
|
|
example) with its interceptor chain is applied. If the target bean and
|
|
the proxy are defined separately, your code can even interact with the
|
|
raw target bean, bypassing the proxy. Hence, it would be inconsistent to
|
|
apply the interceptors to the init method, because doing so would couple
|
|
the lifecycle of the target bean with its proxy/interceptors and leave
|
|
strange semantics when your code interacts directly to the raw target
|
|
bean.</para>
|
|
</section>
|
|
|
|
<section id="beans-factory-lifecycle-combined-effects">
|
|
<title>Combining lifecycle mechanisms</title>
|
|
|
|
<para>As of Spring 2.5, you have three options for controlling bean
|
|
lifecycle behavior: the <link
|
|
linkend="beans-factory-lifecycle-initializingbean"
|
|
><interfacename>InitializingBean</interfacename></link> and <link
|
|
linkend="beans-factory-lifecycle-disposablebean"
|
|
><interfacename>DisposableBean</interfacename></link> callback
|
|
interfaces; custom <literal>init()</literal> and
|
|
<literal>destroy()</literal> methods; and the <link
|
|
linkend="beans-postconstruct-and-predestroy-annotations"
|
|
><interfacename>@PostConstruct</interfacename> and
|
|
<interfacename>@PreDestroy</interfacename> annotations</link>. You can
|
|
combine these mechanisms to control a given bean.</para>
|
|
|
|
<note>
|
|
<para>If multiple lifecycle mechanisms are configured for a bean, and
|
|
each mechanism is configured with a different method name, then each
|
|
configured method is executed in the order listed below. However, if
|
|
the same method name is configured - for example,
|
|
<literal>init()</literal> for an initialization method - for more than
|
|
one of these lifecycle mechanisms, that method is executed once, as
|
|
explained in the preceding section.</para>
|
|
</note>
|
|
|
|
<para>Multiple lifecycle mechanisms configured for the same bean, with
|
|
different initialization methods, are called as follows:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Methods annotated with
|
|
<interfacename>@PostConstruct</interfacename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>afterPropertiesSet()</literal> as defined by the
|
|
<interfacename>InitializingBean</interfacename> callback
|
|
interface</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>A custom configured <literal>init()</literal> method</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Destroy methods are called in the same order:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Methods annotated with
|
|
<interfacename>@PreDestroy</interfacename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>destroy()</literal> as defined by the
|
|
<interfacename>DisposableBean</interfacename> callback
|
|
interface</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>A custom configured <literal>destroy()</literal> method</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</section>
|
|
|
|
<section id="beans-factory-lifecycle-processor">
|
|
<title>Startup and shutdown callbacks</title>
|
|
|
|
<para>The <interfacename>Lifecycle</interfacename> interface defines the
|
|
essential methods for any object that has its own lifecycle requirements
|
|
(e.g. starts and stops some background process):</para>
|
|
|
|
<programlisting language="java">public interface Lifecycle {
|
|
|
|
void start();
|
|
|
|
void stop();
|
|
|
|
boolean isRunning();
|
|
|
|
}</programlisting>
|
|
|
|
<para>Any Spring-managed object may implement that interface. Then, when
|
|
the ApplicationContext itself starts and stops, it will cascade those
|
|
calls to all Lifecycle implementations defined within that context. It
|
|
does this by delegating to a
|
|
<interfacename>LifecycleProcessor</interfacename>:</para>
|
|
|
|
<programlisting language="java">public interface LifecycleProcessor extends Lifecycle {
|
|
|
|
void onRefresh();
|
|
|
|
void onClose();
|
|
|
|
}</programlisting>
|
|
|
|
<para>Notice that the <interfacename>LifecycleProcessor</interfacename> is
|
|
itself an extension of the <interfacename>Lifecycle</interfacename>
|
|
interface. It also adds two other methods for reacting to the context
|
|
being refreshed and closed.</para>
|
|
|
|
<para>The order of startup and shutdown invocations can be important. If a
|
|
"depends-on" relationship exists between any two objects, the dependent
|
|
side will start <emphasis>after</emphasis> its dependency, and it will
|
|
stop <emphasis>before</emphasis> its dependency. However, at times the
|
|
direct dependencies are unknown. You may only know that objects of a
|
|
certain type should start prior to objects of another type. In those
|
|
cases, the <interfacename>SmartLifecycle</interfacename> interface
|
|
defines another option, namely the <methodname>getPhase()</methodname>
|
|
method as defined on its super-interface,
|
|
<interfacename>Phased</interfacename>.</para>
|
|
|
|
<programlisting language="java">public interface Phased {
|
|
|
|
int getPhase();
|
|
|
|
}
|
|
|
|
|
|
public interface SmartLifecycle extends Lifecycle, Phased {
|
|
|
|
boolean isAutoStartup();
|
|
|
|
void stop(Runnable callback);
|
|
|
|
}</programlisting>
|
|
|
|
<para>When starting, the objects with the lowest phase start first, and
|
|
when stopping, the reverse order is followed. Therefore, an object that
|
|
implements <interfacename>SmartLifecycle</interfacename> and whose
|
|
getPhase() method returns <literal>Integer.MIN_VALUE</literal> would be
|
|
among the first to start and the last to stop. At the other end of the
|
|
spectrum, a phase value of <literal>Integer.MAX_VALUE</literal> would
|
|
indicate that the object should be started last and stopped first
|
|
(likely because it depends on other processes to be running). When
|
|
considering the phase value, it's also important to know that the
|
|
default phase for any "normal" <interfacename>Lifecycle</interfacename>
|
|
object that does not implement
|
|
<interfacename>SmartLifecycle</interfacename> would be 0. Therefore, any
|
|
negative phase value would indicate that an object should start before
|
|
those standard components (and stop after them), and vice versa for any
|
|
positive phase value.</para>
|
|
|
|
<para>As you can see the stop method defined by
|
|
<interfacename>SmartLifecycle</interfacename> accepts a callback. Any
|
|
implementation <emphasis>must</emphasis> invoke that callback's run()
|
|
method after that implementation's shutdown process is complete. That
|
|
enables asynchronous shutdown where necessary since the default
|
|
implementation of the <interfacename>LifecycleProcessor</interfacename>
|
|
interface, <classname>DefaultLifecycleProcessor</classname>, will wait
|
|
up to its timeout value for the group of objects within each phase to
|
|
invoke that callback. The default per-phase timeout is 30 seconds. You
|
|
can override the default lifecycle processor instance by defining a bean
|
|
named "lifecycleProcessor" within the context. If you only want to
|
|
modify the timeout, then defining the following would be
|
|
sufficient:</para>
|
|
|
|
<programlisting language="xml"><bean id="lifecycleProcessor" class="org.springframework.context.support.DefaultLifecycleProcessor">
|
|
<!-- timeout value in milliseconds -->
|
|
<property name="timeoutPerShutdownPhase" value="10000"/>
|
|
</bean></programlisting>
|
|
|
|
<para>As mentioned, the <interfacename>LifecycleProcessor</interfacename>
|
|
interface defines callback methods for the refreshing and closing of the
|
|
context as well. The latter will simply drive the shutdown process as if
|
|
stop() had been called explicitly, but it will happen when the context
|
|
is closing. The 'refresh' callback on the other hand enables another
|
|
feature of <interfacename>SmartLifecycle</interfacename> beans. When the
|
|
context is refreshed (after all objects have been instantiated and
|
|
initialized), that callback will be invoked, and at that point the
|
|
default lifecycle processor will check the boolean value returned by
|
|
each <interfacename>SmartLifecycle</interfacename> object's
|
|
<methodname>isAutoStartup()</methodname> method. If "true", then that
|
|
object will be started at that point rather than waiting for an explicit
|
|
invocation of the context's or its own start() method (unlike the
|
|
context refresh, the context start does not happen automatically for a
|
|
standard context implementation). The "phase" value as well as any
|
|
"depends-on" relationships will determine the startup order in the same
|
|
way as described above.</para>
|
|
</section>
|
|
|
|
<section id="beans-factory-shutdown">
|
|
<title>Shutting down the Spring IoC container gracefully in non-web
|
|
applications</title>
|
|
|
|
<note>
|
|
<para>This section applies only to non-web applications. Spring's
|
|
web-based <interfacename>ApplicationContext</interfacename>
|
|
implementations already have code in place to shut down the Spring IoC
|
|
container gracefully when the relevant web application is shut
|
|
down.</para>
|
|
</note>
|
|
|
|
<para>If you are using Spring's IoC container in a non-web application
|
|
environment; for example, in a rich client desktop environment; you
|
|
register a shutdown hook with the JVM. Doing so ensures a graceful
|
|
shutdown and calls the relevant destroy methods on your singleton beans
|
|
so that all resources are released. Of course, you must still configure
|
|
and implement these destroy callbacks correctly.</para>
|
|
|
|
<para>To register a shutdown hook, you call the
|
|
<methodname>registerShutdownHook()</methodname> method that is declared
|
|
on the <classname>AbstractApplicationContext</classname> class:</para>
|
|
|
|
<programlisting language="java">import org.springframework.context.support.AbstractApplicationContext;
|
|
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
|
|
|
public final class Boot {
|
|
|
|
public static void main(final String[] args) throws Exception {
|
|
AbstractApplicationContext ctx
|
|
= new ClassPathXmlApplicationContext(new String []{"beans.xml"});
|
|
|
|
<lineannotation>// add a shutdown hook for the above context... </lineannotation>
|
|
ctx.registerShutdownHook();
|
|
|
|
<lineannotation>// app runs here...</lineannotation>
|
|
|
|
<lineannotation>// main method exits, hook is called prior to the app shutting down...</lineannotation>
|
|
}
|
|
}</programlisting>
|
|
</section>
|
|
</section>
|
|
|
|
<section id="beans-factory-aware">
|
|
<title><interfacename>ApplicationContextAware</interfacename> and
|
|
<interfacename>BeanNameAware</interfacename></title>
|
|
|
|
<para>When an <interfacename>ApplicationContext</interfacename> creates a
|
|
class that implements the
|
|
<interfacename>org.springframework.context.ApplicationContextAware</interfacename>
|
|
interface, the class is provided with a reference to that
|
|
<interfacename>ApplicationContext</interfacename>.</para>
|
|
|
|
<programlisting language="java">public interface ApplicationContextAware {
|
|
|
|
void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
|
|
}</programlisting>
|
|
|
|
<para>Thus beans can manipulate programmatically the
|
|
<interfacename>ApplicationContext</interfacename> that created them,
|
|
through the <interfacename>ApplicationContext</interfacename> interface,
|
|
or by casting the reference to a known subclass of this interface, such as
|
|
<classname>ConfigurableApplicationContext</classname>, which exposes
|
|
additional functionality. One use would be the programmatic retrieval of
|
|
other beans. Sometimes this capability is useful; however, in general you
|
|
should avoid it, because it couples the code to Spring and does not follow
|
|
the Inversion of Control style, where collaborators are provided to beans
|
|
as properties. Other methods of the ApplicationContext provide access to
|
|
file resources, publishing application events, and accessing a
|
|
MessageSource. These additional features are described in <xref
|
|
linkend="context-introduction"/></para>
|
|
|
|
<para>As of Spring 2.5, autowiring is another alternative to obtain
|
|
reference to the <interfacename>ApplicationContext</interfacename>. The
|
|
"traditional" <literal>constructor</literal> and <literal>byType</literal>
|
|
autowiring modes (as described in <xref linkend="beans-factory-autowire"
|
|
/>) can provide a dependency of type
|
|
<interfacename>ApplicationContext</interfacename> for a constructor
|
|
argument or setter method parameter, respectively. For more flexibility,
|
|
including the ability to autowire fields and multiple parameter methods,
|
|
use the new annotation-based autowiring features. If you do, the
|
|
<interfacename>ApplicationFactory</interfacename> is autowired into a
|
|
field, constructor argument, or method parameter that is expecting the
|
|
<interfacename>BeanFactory</interfacename> type if the field, constructor,
|
|
or method in question carries the
|
|
<interfacename>@Autowired</interfacename> annotation. For more
|
|
information, see <xref linkend="beans-autowired-annotation"/>.</para>
|
|
|
|
<para>When an ApplicationContext creates a class that implements the
|
|
<interfacename>org.springframework.beans.factory.BeanNameAware</interfacename>
|
|
interface, the class is provided with a reference to the name defined in
|
|
its associated object definition.</para>
|
|
|
|
<programlisting language="java">public interface BeanNameAware {
|
|
|
|
void setBeanName(string name) throws BeansException;
|
|
}</programlisting>
|
|
|
|
<para>The callback is invoked after population of normal bean properties but
|
|
before an initialization callback such as
|
|
<interfacename>InitializingBean</interfacename>s
|
|
<emphasis>afterPropertiesSet</emphasis> or a custom init-method.</para>
|
|
</section>
|
|
|
|
<section id="aware-list">
|
|
<title>Other <interfacename>Aware</interfacename> interfaces</title>
|
|
|
|
<para>Besides <interfacename>ApplicationContextAware</interfacename> and
|
|
<interfacename>BeanNameAware</interfacename> discussed above, Spring
|
|
offers a range of
|
|
<emphasis><interfacename>Aware</interfacename></emphasis> interfaces that
|
|
allow beans to indicate to the container that they require a certain
|
|
<emphasis>infrastructure</emphasis> dependency. The most important
|
|
<interfacename>Aware</interfacename> interfaces are summarized below - as
|
|
a general rule, the name is a good indication of the dependency
|
|
type:</para>
|
|
|
|
<table id="beans-factory-nature-aware-list" pgwide="1">
|
|
<title><interfacename>Aware</interfacename> interfaces</title>
|
|
|
|
<tgroup cols="3">
|
|
<colspec align="left"/>
|
|
|
|
<thead>
|
|
<row>
|
|
<entry>Name</entry>
|
|
|
|
<entry>Injected Dependency</entry>
|
|
|
|
<entry>Explained in...</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><para><classname>ApplicationContextAware</classname></para></entry>
|
|
|
|
<entry><para>Declaring
|
|
<interfacename>ApplicationContext</interfacename></para></entry>
|
|
|
|
<entry><para><xref linkend="beans-factory-aware"/></para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><classname>ApplicationEventPublisherAware</classname></para></entry>
|
|
|
|
<entry><para>Event publisher of the enclosing
|
|
<interfacename>ApplicationContext</interfacename></para></entry>
|
|
|
|
<entry><para><xref linkend="context-introduction"/></para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><classname>BeanClassLoaderAware</classname></para></entry>
|
|
|
|
<entry><para>Class loader used to load the bean
|
|
classes.</para></entry>
|
|
|
|
<entry><para><xref linkend="beans-factory-class"/></para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><classname>BeanFactoryAware</classname></para></entry>
|
|
|
|
<entry><para>Declaring
|
|
<interfacename>BeanFactory</interfacename></para></entry>
|
|
|
|
<entry><para><xref linkend="beans-factory-aware"/></para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><classname>BeanNameAware</classname></para></entry>
|
|
|
|
<entry><para>Name of the declaring bean</para></entry>
|
|
|
|
<entry><para><xref linkend="beans-factory-aware"/></para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><classname>BootstrapContextAware</classname></para></entry>
|
|
|
|
<entry><para>Resource adapter
|
|
<interfacename>BootstrapContext</interfacename> the container runs
|
|
in. Typically available only in JCA aware
|
|
<interfacename>ApplicationContext</interfacename>s</para></entry>
|
|
|
|
<entry><para><xref linkend="cci"/></para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><classname>LoadTimeWeaverAware</classname></para></entry>
|
|
|
|
<entry><para>Defined <emphasis>weaver</emphasis> for processing
|
|
class definition at load time</para></entry>
|
|
|
|
<entry><para><xref linkend="aop-aj-ltw"/></para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><classname>MessageSourceAware</classname></para></entry>
|
|
|
|
<entry><para>Configured strategy for resolving messages (with
|
|
support for parametrization and
|
|
internationalization)</para></entry>
|
|
|
|
<entry><para><xref linkend="context-introduction"/></para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><classname>NotificationPublisherAware</classname></para></entry>
|
|
|
|
<entry><para>Spring JMX notification publisher</para></entry>
|
|
|
|
<entry><para><xref linkend="jmx-notifications"/></para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><classname>PortletConfigAware</classname></para></entry>
|
|
|
|
<entry><para>Current <interfacename>PortletConfig</interfacename>
|
|
the container runs in. Valid only in a web-aware Spring
|
|
<interfacename>ApplicationContext</interfacename></para></entry>
|
|
|
|
<entry><para><xref linkend="portlet"/></para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><classname>PortletContextAware</classname></para></entry>
|
|
|
|
<entry><para>Current <interfacename>PortletContext</interfacename>
|
|
the container runs in. Valid only in a web-aware Spring
|
|
<interfacename>ApplicationContext</interfacename></para></entry>
|
|
|
|
<entry><para><xref linkend="portlet"/></para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><classname>ResourceLoaderAware</classname></para></entry>
|
|
|
|
<entry><para>Configured loader for low-level access to
|
|
resources</para></entry>
|
|
|
|
<entry><para><xref linkend="resources"/></para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><classname>ServletConfigAware</classname></para></entry>
|
|
|
|
<entry><para>Current <interfacename>ServletConfig</interfacename>
|
|
the container runs in. Valid only in a web-aware Spring
|
|
<interfacename>ApplicationContext</interfacename></para></entry>
|
|
|
|
<entry><para><xref linkend="mvc"/></para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><classname>ServletContextAware</classname></para></entry>
|
|
|
|
<entry><para>Current <interfacename>ServletContext</interfacename>
|
|
the container runs in. Valid only in a web-aware Spring
|
|
<interfacename>ApplicationContext</interfacename></para></entry>
|
|
|
|
<entry><para><xref linkend="mvc"/></para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<para>Note again that usage of these interfaces ties your code to the Spring
|
|
API and does not follow the Inversion of Control style. As such, they are
|
|
recommended for infrastructure beans that require programmatic access to
|
|
the container.</para>
|
|
</section>
|
|
</section>
|