java - Autowiring 集合

标签 java spring annotations autowired

你们中的大多数人可能会说我应该使用谷歌来解决这个问题,因为它很简单,但我找不到真正正确的解决方案。

我有两个 session 范围的模型:PlaylistTrack。正如您所猜测的,播放列表包含轨道列表:

@Component
public class Playlist {
    String name;
    List<Track> tracklist;

@Component
public class Track {
    int duration;
    String artist;

我在 Controller 中使用@Autowired注释来获取播放列表。在第一个 Controller 中我设置了播放列表的属性,在第二个 Controller 中我得到了它们。播放列表的 name 属性一切正常,但 tracklist 为空。我知道我必须使用 @Resource@Qualifier 之类的东西,但我不明白如何使这个注释起作用。简单写一下

@Resource
private List<Track> tracks; 

似乎不起作用。 在我的 servlet-context.xml 中,两个 bean 声明如下:

<bean id="track" class="com.foo.bar.models.Track" scope="session">
    <aop:scoped-proxy/>
</bean>

<bean id="playlist" class="com.foo.bar.models.Playlist" scope="session">
    <aop:scoped-proxy/>
</bean>

我已经看过这个 Spring autowire a list但对我没有帮助,因为轨道不是通过 .xml 声明的,而是在 Controller 中设置的。

最佳答案

问题已解决。我认为我的错误是用从服务传递的非自动连线播放列表覆盖了 Controller 中的自动连线播放列表。

Controller 代码是:

@Autowired
private Playlist playlist;
@Autowired
private MyService service;

@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
public ModelAndView uploadAndParse(@RequestParam("file") MultipartFile file) {
    String name = file.getOriginalFilename();

    playlist = service.getPlaylistFromFile(file); //<--wrong step
    playlist.setCompleteName(name);

    ModelAndView view = new ModelAndView("upload", "list", playlist.getTracks());

    return view;
}

服务是:

public Playlist getPlaylistFromFile(MultipartFile file) {
    Playlist playlist = new Playlist();
    //do something here...
    return playlist;
 }

现在,我解决了从 Track 中删除 @Component 注释(如 JB Nizet 建议),修改 Controller 如下:

playlist.setTracks(service.getListOfTrackFromFile(file));

服务如下:

public List<Track> getPlaylistFromFile(MultipartFile file) {
    List<Track> tracklist = new ArrayList<Track>();
    //do something here...
    return tracklist;
 }

就像这样工作。如果您认为我没有说到重点,请告诉我。

关于java - Autowiring 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9140671/

相关文章:

java - 使用java中的比较器自定义排序

java - 如何将字符串集合和每个元素验证为 URL?

python - Django注释过滤外键的最小值和最大值

java - 使用注解来调用函数

java - 为什么java在依赖注入(inject)上使用注解

java - Tomcat的服务器状态登录问题

java - 如何 "package"SQL 数据库

java - 无法使用 spring JpaRepository 持久保存数据

java - Spring AOP - @AfterThrowing

java - 为什么我不能在 spring-boot 中使用 apache httpcomponents 对象,即使它列在 MVN 依赖项中?