@with注解到底是做什么的?(Play框架)

7

我不太理解@with注释的作用。

在Play框架网站上,写道:

我们可以使用@With注释对控制器进行注释,以告诉Play调用相应的拦截器

它和继承一样吗?它会调用给定类参数的@before吗?它到底是做什么的?

2个回答

7
我能最好的描述它的方式是,它在你的拦截器控制器级别上给予你多重继承。拦截器包括 @Before@After 注解。
因此,您可以:
  • 定义一个控制器来处理安全区域中的@Before注解
  • 定义一个控制器来使用@Before注入静态数据以共享操作
然后,您可以定义一个或多个控制器,其中包含所有操作,并使用@With注解来使用上述两个控制器。这意味着您可以清晰地分离代码,并且不必依赖继承来执行@Before注解。

6
假设您有2个控制器:
A具有@Before或其他控制器操作注入注释,
B用@With(A.class)进行注释。
当调用B的操作方法时,A中定义的所有注入操作将生效。
这有点类似继承。但是,通过继承,您最多只能扩展一个类。但是,您可以使用@With({A.class, Z.class, ...})。

如果我理解正确的话,在B类中我可以(隐式地)调用A类中的任何方法? - james
不,只有拦截器((at)Before、(at)After、(at)Final等)能够起作用。 - Gelin Luo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接