Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

what exactly does the @with annotation do? (Play Framework)

I don't quite understand what the @with annotation does.

in the Play framework site, it is written :

we can annotate the controllers using the @With annotation to tell Play to invoke the corresponding interceptors

is it the same as inheritance ? will it invoke @before of the given class parameter ? what exactly does it do ?

like image 969
james Avatar asked Feb 20 '12 22:02

james


2 Answers

The best way I can describe it, is that it kind of gives you multiple inheritance at your controller level for your interceptors. Interceptors being the @Before, @After annotations.

You could therefore

  • define a controller that dealt with your secure area @Before annotations
  • define a controller that dealt with injecting your static data for shared actions using @Before

you could then define a controller or controllers that contained all your actions, and use the @With annotation to make use of the two controllers described above. It means you can separate your code out cleanly, and not have to rely on inheritance to execute the @Before annotations.

like image 128
Codemwnci Avatar answered Oct 25 '22 08:10

Codemwnci


Suppose you have 2 controllers:

  • A has @Before or other controller action injection annotations,
  • B get annotated with @With(A.class)

All those injection actions defined in A will be effective when calling B's action methods.

It's kind of inheritance. However with inheritance you can extend at most one class. But you can do @With({A.class, Z.class, ...})

like image 6
Gelin Luo Avatar answered Oct 25 '22 09:10

Gelin Luo