Creating a custom scope is usually the preserve of framework developers, but it can be beneficial for us to understand how they can be created as we may find the need to write one in the future.
To create a new pseudo scope we use the following code:
@Scope @Retention(RUNTIME) @Target( { METHOD, TYPE, FIELD } ) public @interface MyPseudoScope {}
But as it is unlikely that we will need to create a pseudo scope, the following is how to create a new normal scope:
@NormalScope @Retention(RUNTIME) @Target( { METHOD, TYPE, FIELD } ) public @interface MyNonPassivatingScope {}
As the default value for the passivating
attribute on @NormalScope
is false, we don't need to set it if we want to define a non-passivation capable scope.
Either of these scopes could then be used just as any other of the built-in scopes provided in CDI by annotating a bean with the scope annotation.
Creating the scope is the easy part; the difficult task is to implement a Context
interface for the new scope. The Context...