public
なプロパティに対し、自動的にsetter
/getter
を定義し、これを経由してアクセスするようになっている。これはplay
が自身でコンパイルを行うときに、そのようなバイトコードになるようにすることで実現している。
ソース上は、単なるpublic
プロパティを直接操作しているだけだが、実際はsetter
/getter
を経由してアクセスしているように振る舞う。
play.classloading.enhancers.PropertiesEnhancer.class
https://www.playframework.com/documentation/ja/1.2.x/model#properties
既に書かれているsetter
/getter
が優先して使用される。
便利な機能だがソースを直してもバイトコードに反映されていないことが稀にあり、暗黙で行われているため気付きにくい。
思ったように動かないときは疑ってみることも必要。
playframework
がコンパイルするときに仕掛けを仕込んでいる。
eclipseで開発しているときeclipseは、eclipse/classes
(ビルドパス設定)にコンパイル結果を出力するが、実際には使われていない。
playframework
が起動時に、tmp配下に独自のコンパイル結果を出力し、ここのコードが実行される。
ソースを修正してもバイトコードに反映されていないような気がしたら、このtmpフォルダごと削除すれば強制的に再コンパイルさせることができる。
ソース自体の問題なのか分からないときは利用しよう。。