Web アプリケーションを Spring に変換しています。自動配線は、Spring コンテキストで開始された場合は成功しますが、他の状況では失敗するはずです。
MangaBean
という名前のプロパティを持つ がありますgenre
。Genre の値は、除外された一連のジャンルからの 1 つである必要があります。検証を Bean 自体に配置しました。このようなもの:
@Component
public class MangaBean{
private String title;
private String author;
private String isbn;
private String genre;
//getters
public void setTitle(String title){
//validations
}
public void setGenre(String genre){
boolean result=MangaUtil.verifyGenre(genre);
if(result){
this.genre=genre;
}else{
this.genre=null;
}
}
}
このユーティリティは、テーブルから一連のジャンルをフェッチし、提供されたジャンルを検証するメソッドを呼び出します。
@Component
public class MangaUtil{
@Autowired
MangaDao mDao;
public static boolean verifyGenre(String genre){
List<String> genres=mDao.getGenresList(); //null pointer exception
//do validations
}
}
MangaDao
NamedParameterJDBCTemplate
DB からジャンルをフェッチする autowired が含まれています。
MangaDao のコード:
@Repository
public class MangaDao{
@Autowired
private NamedParameterJdbcTemplate template;
public List<String> getGenresList(){
String query="select genres from manga_table";
Map<String,String> paramMap=new HashMap<String, String>();
return template.queryForList(query, paramMap, String.class);
}
}
上記の配置では、MangaUtil の自動配線時にも MangaUtil の呼び出しが正常に機能します。例:
@Component
public class MangaBean{
@Autowired
MangaUtil mangaUtil;
private String title;
private String author;
private String isbn;
private String genre;
//getters
public void setTitle(String title){
//validations
}
public void setGenre(String genre){
boolean result=mangaUtil.verifyGenre(genre);
if(result){
this.genre=genre;
}else{
this.genre=null;
}
}
}
しかし、Bean 内で自動配線を使用すると、自分で Bean をインスタンス化した場合に自動配線が失敗しますMangaBean mb=new MangaBean()
。このような場合のアドバイスをお願いします。Bean 自体に自動配線せずに、Bean からバリデーターメソッドを呼び出したいです。出来ますか?. そうでない場合、ジャンルのリストを保存し、それを Bean で使用してデータを検証する方法はありますか。ご意見をお聞かせください。