Project

General

Profile

Actions

Sample-spring-basic » History » Revision 17

« Previous | Revision 17/33 (diff) | Next »
Henning Blohm, 09.11.2013 14:11


A basic Spring with Z2 modularity sample

The sample contained in the repository z2-samples.spring-basic is a clean room example on how to use the Spring integration features described in how_to_spring.

There is no further pre-requisite to running this sample, and you may proceed as described in How to run a sample. Here's the really fast version:

mkdir install
cd install 
git clone -b master http://git.z2-environment.net/z2-base.core
git clone -b master http://git.z2-environment.net/z2-samples.spring-basic

# on Linux / Mac OS:
cd z2-base.core/run/bin
./gui.sh

# on Windows:
cd z2-base.core\run\bin
gui.bat

If you want to inspect the code using Eclipse, please create a workspace in install (i.e. install/workspace) and import the Git repositories and projects (see also First steps).

There are three modules contained in this sample. For the moment only consider the following two:

com.zfabrik.samples.spring-basic.services

This module has a classpath defined applicationContext and exposes an annotation defined bean ComputationServiceImpl bean from it as a service to be consumed from another module: The computations bean.

The application context enables discovery of Spring beans that are marked by annotations such as @Service, @Component, @Repository:

<beans ...>
    <!-- Turn on annotation based config -->
    <context:annotation-config/>
    <!-- Turn on auto discovery -->
    <context:component-scan base-package="com.zfabrik.samples.impl"/>
</beans>

The *computations" bean implementation implements the interface IComputationService and is itself not visible to consumers. It's structure is roughly like this:

@Service("computations")
public class ComputationServiceImpl implements IComputationService {

...

}

The computations bean is exposed via the Z2 component com.zfabrik.samples.spring-basic.services/computations:

com.zfabrik.component.type=org.springframework.bean

#
# the context that defines the bean (more than one
# bean can be exposed like this)
#
bean.context=com.zfabrik.samples.spring-basic.services/applicationContext

#
# the bean name
#
bean.name=computations

Note that the Z2 Bean component names its application context. At runtime this means that an attempt to retrieve the bean will make sure the application context is loaded - and not any earlier.

com.zfabrik.samples.spring-basic.frontend

This module has a Web application with an application context defined in WEB-INF/applicationContext. It uses Spring AspectJ based annotation driven configuration to inject dependencies into instances of ControllerServlet.

Note the Java component descriptor that, apart from referencing the service module, holds the minimum declaration to make sure of Spring with AspectJ supported, compile-time-woven annotation based configuration:

com.zfabrik.component.type=com.zfabrik.java

java.privateReferences=\
    com.zfabrik.servletjsp,\
    org.springframework.transaction,\
    org.springframework.orm,\
    org.springframework.web,\
    com.zfabrik.springframework,\
    com.zfabrik.samples.spring-basic.services

java.privateIncludes=\
    org.springframework.foundation/aspects

java.compile.order=java,spring_aspectj

It's application context imports the computations service from the other module above and enables the use of Spring configuration (note: Unlike above it does not enable discovery of Spring beans):

<beans ... >
    <!-- turn on @Configurable support -->
    <context:spring-configured/>
    <!-- Turn on annotation based config -->
    <context:annotation-config/>
     <!-- application config: Bind the bean at samples.spring.simplemodules.services/computations --> 
    <bean id="computations" class="com.zfabrik.springframework.ComponentFactoryBean">
        <property name="componentName" value="com.zfabrik.samples.spring-basic.services/computations"/>
        <property name="className" value="com.zfabrik.samples.services.IComputationService"/>
    </bean>
</beans>

Finally

Open a browser and navigate to http://localhost:8080/frontend to verify you get this:

An extended Spring with Z2 modularity and some Spring Security sample

The third module com.zfabrik.samples.spring-basic.secured contained in the sample repository implements a very similar basic frontend to the one above but illustrating in addition:

  • How to use Spring Security to secure the access to a Web application
  • How to use Spring Security to secure methods of a bean
  • How to use Spring Security with Spring AspectJ weaving

tbc

Updated by Henning Blohm over 10 years ago · 17 revisions