Play plug-in (比如play.PlayPlugin的子类) 可以包含‘enhancers’,以便于在运行时修改应用程序库,以增加功能。这就是play一些神奇的地方。
内建的play.CorePlugin使用enhancers(play.classloading.enhancers包)来动态添加代码到你的应用程序里:
- ContinuationEnhancer –为控制器类添加continuations支持
- ControllersEnhancer – 让控制器的action方法实现线程安全,还可以为方法调用添加HTTP跳转功能
- LocalvariablesNamesEnhancer – 跟踪控制器里的本地变量名称
- MailerEnhancer – 设置play.mvc.Mailer子类
- PropertiesEnhancer – 把所有的应用程序类转换到可用的JavaBeans(其中的属性是基于域的)
- SigEnhancer – 为每个类的签名计算一个唯一的哈希值,以便自动加载
另外,play.db.jpa.JPAPlugin增强了play.db.jpa.JPABase的子类,提供了更方便的jpa查询方法。这个一般用于play.db.jpa.Model的子类,作为应用程序的model类。如果这些类作为play.db.jpa.GenericModel的子类,会存在一定问题。
要想添加自己的java增强特性,在插件的 enhance(ApplicationClass applicationClass) 方法里使用 play.classloading.enhancers.Enhancer 的子类。