将我的网络应用程序转换为Spring。在Spring上下文中启动自动装配是成功的,但在其他情况下失败则应该如此。
我有一个MangaBean
,其中有一个名为genre
的属性。类型的价值应该是例外类型中的一个。我已经将验证放在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;
}
}
}
util调用从表中获取一组类型的方法并验证提供的类型。
@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
,它从数据库中提取类型。
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()
的情况下,autowire会失败。请为这种情况提供建议。 我想从bean中调用validator方法而不在bean本身进行任何自动装配。有可能吗?。如果没有,有什么方法可以存储一个类型列表并在bean中使用它来验证我的数据。请指教。
答案 0 :(得分:1)
默认情况下,自动装配仅适用于Spring托管bean,即Spring创建的bean。使其适用于用例如实例化的bean。 new
请参阅Spring文档:
您需要使用@Configurable注释并根据文档配置AspectJ。
答案 1 :(得分:0)
也许不是你问题的真正答案。但我想知道你是如何编译这段代码的:
@Component
public class MangaUtil(){ // <<< parentheses not allowed here
@Autowired
MangaDao mDao;
public static boolean verifyGenre(String genre){
List<String> genres=mDao.getGenresList(); // <<< you are referencing a non static attribute from a static method
}
}