public interface Cdi
IoC
pattern. The annotations from JSR 250 and JSR 330 are combined to configure component
implementations. A CDI framework
can understand these standardized annotations and assembles
your components performing the dependency injection. We strongly recommend to use
spring as IocContainer
but there are also other implementations
like JBoss Seam, Google Guice (GIN for GWT)/Eclipse SiSu, etc. public interface MyComponent { void doSomething(); } public interface OtherComponent { void doSomethingElse(); } //this annotation declares this as a component that is configured by theEven though there are different variants how to do it, we strongly recommend using public setter injection as it is the best approach for testability, debugging and getting most helpful messages in case of an error. Also we provideIocContainer
... @Named
public class MyComponentImpl implements MyComponent { private OtherComponent otherComponent; // this annotation defines a dependency to OtherComponent. TheIocContainer
verifies that there is exactly // one component available that implements OtherComponent and that gets automatically injected here... @Inject
public void setOtherComponent(OtherComponent otherComponent) { this.otherComponent = otherComponent; } // this annotation defines an initializer method that is called after all dependencies have been injected (e.g. // setOtherComponent must have been called before). @PostConstruct
public void initialize() { // ... setup the component here ... } // this annotation defines an destroy method that is called when the application is shut down... @PostConstruct
public void dispose() { // ... free resources, release thread-pool, etc. ... } public void doSomething() { // do something and maybe then this.otherComponent.doSomethingElse(); } } // and finally to complete the example... @Named
public class OtherComponentImpl implements OtherComponent { public void doSomethingElse() { // here we do something else... } }
AbstractLoggableComponent
that you can extend from.Modifier and Type | Field and Description |
---|---|
static String |
CDI_NAME
|
static String |
GET_INSTANCE
We strongly believe in the
Ioc pattern and try to avoid the keyword static except for constants
(in combination with final). |
static final String CDI_NAME
name
of a
component
for CDI
. Named
(MyComponentInterface.CDI_NAME).
static final String GET_INSTANCE
Ioc
pattern and try to avoid the keyword static except for constants
(in combination with final). Books like
Design Patterns. Elements of Reusable Object-Oriented Software. introduced various patterns like
Singleton (or maybe AbstractFactory) that make use of static access and lead to
inflexible and bad design. Instead Ioc
is the pattern of choice to get access to singletons or factories.
However, the problem is that Java does NOT support Ioc
in its core. So for a small and simple application
it might be over-complicated to use it. Ioc
design which allows extension and customization.getInstance()
methods for convenience.StringUtil
it is fine to use
StringUtilImpl.getInstance()
. However if you want to make use of many components
of this project and decide for Ioc
you can get all utilities and other components
injected
. This gives you the final freedom to replace or extend components without
patching our code. *.gwt.xml
to replace the default implementation with
a derived custom class extending the default and overriding methods to add changed behavior. Copyright © 2001–2016 mmm-Team. All rights reserved.