たまたまAOPでトランザクションをかけるテストクラスにはインターフェースを定義していなかった。
その時点では、getBeanしてテストクラスでキャストしてた。
【ApplicationContextファイル】
#別途Bean定義済み
【Beanクラス】 package hoge; public class HogeA { public HogeA() { super(); } } 【Beanを取得するクラス】 public class HogeB { public HogeB() { super(); } public static void main(String args[]) { AppplicationContext context = ClassPathXmlApplicationContext("【ApplicationContextファイル】") HogeA hogeA = (HogeA) context.getBean("hogeA"); ←ClassCastExceptionにならない } }
んで、途中でAOPとインターフェースの関係について記述を見かけて、テストクラスにインターフェースを定義してみた。
そしたら、getBeanしてテストクラスでキャストしたらClassCastExceptionになった。
【Beanクラス】 package hoge; public class HogeA interface IHogeA { public HogeA() { super(); } } 【Beanを取得するクラス】 public class HogeB { public HogeB() { super(); } public static void main(String args[]) { AppplicationContext context = ClassPathXmlApplicationContext("【ApplicationContextファイル】") HogeA hogeA = (HogeA) context.getBean("hogeA"); ←ClassCastExceptionになる } }
んで、インターフェースでキャストしたらOKに。
【Beanを取得するクラス】 public class HogeB { public HogeB() { super(); } public static void main(String args[]) { AppplicationContext context = ClassPathXmlApplicationContext("【ApplicationContextファイル】") IHogeA hogeA = (IHogeA) context.getBean("hogeA"); ←ClassCastExceptionにならない } }
なぜにインターフェースを定義していないときは、テストクラスでキャストしてもOKなのに、インターフェースを定義した途端ダメになるんじゃ?