gpt4 book ai didi

java - 如何在可以在 spring 上下文之外调用该方法的类中使用 Autowiring

转载 作者:行者123 更新时间:2023-12-01 14:58:24 26 4
gpt4 key购买 nike

将我的 Web 应用程序转换为 Spring。 Autowiring 在 Spring 上下文中启动的情况下会成功,但在其他情况下会失败,这是理所应当的。

我有一个 MangaBean,它有一个名为 genre 的属性。 Genre 的值应该是一组异常(exception)的流派中的一个。我已将验证放入 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 包含一个 Autowiring 的 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);
}
}

在上面的安排中,当我 Autowiring 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 内使用 Autowiring ,那么在我自己实例化 bean(例如 MangaBean mb=new MangaBean())的情况下, Autowiring 将会失败。像这样的情况请指教。 我想从我的 bean 中调用 validator 方法,而无需 bean 本身进行任何 Autowiring 。这可能吗?。如果没有,有什么方法可以存储流派列表并在 bean 中使用它来验证我的数据。请指教。

最佳答案

默认情况下, Autowiring 仅适用于 Spring 管理的 bean,即由 Spring 创建的 bean。为了使其适用于实例化的bean,例如请参阅 Spring 文档:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-atconfigurable

您需要使用@Configurable注释并按照文档配置AspectJ。

关于java - 如何在可以在 spring 上下文之外调用该方法的类中使用 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14036742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com