The idea is to wrap the information about added features inside a {since} block, not just put it on
top of a section. Right now a user doesn't know what exactly got added... I'll edit this page to
show what I mean...
On 03.10.2010 08:42, [email protected] wrote:
Spring <https://cwiki.apache.org/confluence/display/TAPESTRY/Spring>
Page *edited* by Christophe Cordenier
<https://cwiki.apache.org/confluence/display/~ccordenier>
Changes (3)
...
{code}
h2. Configuring Spring with Tapestry Symbols
{info:title=Since 5.2}
{info}
{since:since=5.2}{since}
This is accomplished by a BeanFactoryPostProcessors that resolves the values of
'placeholders' from
symbol values. In the following example the value of the Bean's property
'productionMode' is the
value of the Tapestry's symbol
[tapestry.production-mode|..apidocs/org/apache/tapestry5/SymbolConstants.html#PRODUCTION_MODE]
...
Full Content
Tapestry/Spring Integration
Provides integration between Tapestry and Spring, allowing beans defined by
Spring to be injected
into Tapestry IoC services, and into Tapestry components.
Changes From 5.0
You may now use the @Inject or @InjectService annotations inside Spring beans;
these will be
resolved to Tapestry services or other objects available via the
MasterObjectProvider. Please see
the [detailed guide to Injection|../tapestry-ioc/injection.html].
The dependency on Spring is no longer scope "provider" and has changed to 2.5.6.
*Spring Beans are no longer exposed as services, unless 5.0 compatibility mode
is enabled.*
You no longer create a ContextLoaderListener.
These changes represent an unfortunate backwards compatibility issue. If
necessary, you can still
use tapestry-spring version 5.0.18 with the rest of Tapestry.
Spring Version
This module is compiled and tested against Spring 2.5.6. It should be resonable
to override the
dependency to earlier versions of Spring, though the code makes use of some
APIs that were added to
Spring to support JDK 1.5 annotations.
Usage
The integration is designed to be a very thin layer on top of Spring's normal
configuration for a
web application.
Detailed instructions are available in the Spring documentation
<http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#context-create>.
Please
omit the part about creating a ContextLoaderListener: this is now done
automatically by Tapestry.
web.xml changes
The short form is that you must make two small changes to your application's
web.xml.
First, a special filter is used in replace of the standard TapestryFilter:
<filter>
<filter-name>app</filter-name>
<!-- Special filter that adds in a T5 IoC module derived from the Spring
WebApplicationContext. -->
<filter-class>org.apache.tapestry5.spring.TapestrySpringFilter</filter-class>
</filter>
Secondly, you may add the normal Spring configuration, consisting of an optional
<context-param>
identifying which Spring bean configuration file(s) to load:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/daoContext.xml
/WEB-INF/applicationContext.xml</param-value>
</context-param>
The <context-param> lists the Spring bean configuration file. It is optional
and defaults to just
/WEB-INF/applicationContext.xml if omitted.
Injecting beans
Inside your component classes, you may use the
[Inject|../apidocs/org/apache/tapestry5/ioc/annotations/Inject.html]
annotation. Typically, just the
field type is sufficient to identify the Spring bean to inject:
@Inject
private UserDAO userDAO;
Searching for Spring beans is threaded into the [MasterObjectProvider
service|../tapestry-ioc/injection.html]. The Spring context becomes one more
place that Tapestry
searches when determining the injection for a injected field or method
parameter.
Injecting Tapestry services in Spring beans
If you have configured Spring to allow annotation based injection, then you
will be able to inject
Tapestry services into your Spring Beans.
This feature is only available when Spring ApplicationContext is not configured
and loaded externally.
Inside your Spring beans, you may use
[Inject|../apidocs/org/apache/tapestry5/ioc/annotations/Inject.html] and
Autowired
<http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/factory/annotation/Autowired.html>
annotations.
Simply add these two annotations on top the field you want to inject in your
Spring bean.
@Inject
@Autowired
private MyService myService;
or use @Inject on top of arguments in @Autowired bean constructor methods
private final MyService myService;
@Autowired
public UserDAOImpl(@Inject MyService myService)
{
this.myService = myService;
}
Configuring Spring with Tapestry Symbols
*Added in 5.2*
This is accomplished by a BeanFactoryPostProcessors that resolves the values of
'placeholders' from
symbol values. In the following example the value of the Bean's property
'productionMode' is the
value of the Tapestry's symbol
[tapestry.production-mode|..apidocs/org/apache/tapestry5/SymbolConstants.html#PRODUCTION_MODE]
<bean id="myBean" class="org.example.MyBean">
<property name="productionMode" value="${tapestry.production-mode}"/>
</bean>
ApplicationContext Service
The Spring ApplicationContext is also added as a service.
ApplicationContextCustomizer
A new chain-of-command service,
[ApplicationContextCustomizer|../apidocs/org/apache/tapestry5/spring/ApplicationContextCustomizer.html]
allows the application context, created by Tapestry, to be customized as it is
created. You may
contribute your own ApplicationContextCustomizer instances as needed.
5.0 Compatibility Mode
In some circumstances, it is desirable to configure the Spring
ApplicationContext externally. The
context <config-param> "tapestry.use-external-spring-context" can be configured to
"true". Tapestry
will then use an existing ApplicationContext, provided by a Spring
ContextLoaderListener. You will
still be able to inject Spring beans into Tapestry components and services, and
the
ApplicationContext service will be visible ... but you will not be able to
inject Tapestry IoC
services into Spring beans.
This option provides compatibility with the tapestry-spring 5.0, including
exposing Spring beans as
Tapestry IoC services (something that no longer occurs unless compatibility
mode is enabled).
Limitations
Non-singleton beans are not handled properly. Tapestry will request the beans
from the application
context in a manner unsuitable for their lifecycle. For the moment, you should
consider the
non-singleton beans to be not-injectable. Instead, inject the
ApplicationContext service and obtain
the non-singleton beans as needed.
Change Notification Preferences
<https://cwiki.apache.org/confluence/users/viewnotifications.action>
View Online <https://cwiki.apache.org/confluence/display/TAPESTRY/Spring> |
View Changes
<https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=23338503&revisedVersion=3&originalVersion=2>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]