返回信息流这是一个获取youtube视频的后台代码,其中
@Scheduled(fixedRate = 3000, initialDelay = 1000)
public void execute(){
executeGames();
executeScienceTechnology();
executeEntertainment();
}
@Bean(name = "entertainmentCache")
private List<Video> executeEntertainment(){
return entertainmentVideoDataCache.cacheVideo();
}
上面的 entertainmentVideoDataCache.cacheVideo()是连接youtube去获取视频数据的。
那么问题来了,通过这种方式调用@Bean注解的executeEntertainment()方法,能否刷新entertainmentCache这个Bean里面的数据。
还是这个Bean里面的数据不会变化,就是第一次调用这个函数返回的值?
这是一条镜像帖。来源:北邮人论坛 / java / #57224同步于 2017/8/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
【问题】【在线等】Spring注入相关问题
alisapapapa
2017/8/24镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
最终还是要看 entertainmentVideoDataCache.cacheVideo() 这个返回的什么东西..
如果这个函数的行为.返回的list是一个单例的..那就可以..
如果每一次调用都是返回一个新的list..那估计不可能..
prototype应该是可以的
【 在 alisapapapa (alisa) 的大作中提到: 】
: bean不设置为单例也是不行的喔
通过『我邮2.0』发布
五楼正解,一下是补充的代码。可以看到每一次返回的List都是新的实例,将List的定义拿到外面就可以解决问题了。
刚学Spring没几天,实习就被叫去改bug,终于解决了,感谢。
但是还是没有理解的很透彻,老哥们有空可以给我解答一下吗。23333
@Component("scienceTechnologyVideoDataCache")
public class ScienceTechnologyVideoDataCacheImpl extends YouTubeVideoDataCacheAbstract {
@Override
public List<Video> cacheVideo() {
List<Video> list = new ArrayList<>();
//中间是获取视频列表的逻辑
return list;
}
}
单纯的修改这个参数,我试过了不行的。
最后发现是返回的List本来就不是单例的23333
还有这个bean本身就应该是单例的呀,因为我别的地方要获得其中的值的,所以这个bean一定得是单例的
【 在 ml3615556 的大作中提到: 】
: prototype应该是可以的
:
: 通过『我邮2.0』发布