[play1]setter/getterの自動作成の仕組み

  playframework1

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フォルダごと削除すれば強制的に再コンパイルさせることができる。

ソース自体の問題なのか分からないときは利用しよう。。

LEAVE A COMMENT