小编Yot*_*oen的帖子

在super bean和扩展bean上调用@PostConstruct

我有一个带有@PostConstruct的BaseBean,以及一个扩展它的bean,我想调用另一个@PostConstruct.我已经阅读了几个可能的地方,但是,似乎首先调用扩展类的@postConstruct(如果第二个被调用的话).然后我在"上下文"上得到一个NPE,因为我假设已经调用了超级bean的PostConstruct.

这可以吗?如果是这样,我做错了什么?

基豆:

@ManagedBean
@RequestScoped
public class BaseBean {
@ManagedProperty(value = "#{contextBean}")
  private ContextBean contextBean;
  Context context;
@PostConstruct
public void setupContext() {
    context = getContextBean().getContext();
}
Run Code Online (Sandbox Code Playgroud)

扩展bean:

@ManagedBean
@RequestScoped
public class SmartBoxSearchBean extends BaseBean {
@PostConstruct
public void setUp() {
    jsonHelper = context.get(SmartBoxJsonHelper.class);
}
Run Code Online (Sandbox Code Playgroud)

谢谢,Yotam.

jsf postconstruct

9
推荐指数
1
解决办法
3804
查看次数

Mockito注入不适用于构造函数和setter模拟在一起

我有一个类通过构造函数注入成员,其他通过setter注入.我似乎无法让Mockito注入二传手.注入的构造函数被模拟得很好,但是setter的返回为null.当我将setter-ed成员翻转到构造函数注入时,一切都很顺利.这是原始的生产代码:

@Autowired
private BetRepository betRepository;

public void setBetRepository(BetRepository betRepository) {
this.betRepository = betRepository;
}


public TournamentScoringCache(TournamentScoringCacheInitializer cacheInitializer,
        ScoringEngineInitializer scoringEngineInitializer) {
    tournamentUserStates = cacheInitializer.initCache();
    scoringEngines = scoringEngineInitializer.initEngines();
}

public <T extends SideScore> void updateGameScore(Long tournamentId, Long gameId, MatchScore<T> score) {
    Map<Long, UserTournamentState> userStates = tournamentUserStates.get(tournamentId);
    ScoringEngine<?> scoringEngine = scoringEngines.get(tournamentId);
    List<Bet> bets = betRepository.getBetsByGameId(gameId);  //HERE IS WHERE I GET THE NPE
....
}
Run Code Online (Sandbox Code Playgroud)

测试代码:

@Mock
BetRepository betRepository;
@Mock
TournamentScoringCacheInitializer cacheInitializer;
@Mock
ScoringEngineInitializer engineInitializer;

@InjectMocks
private TournamentScoringCacheAndDB tournamentScoringCache;

@Test
public void testUpdateGameScore() { …
Run Code Online (Sandbox Code Playgroud)

setter spring constructor code-injection mockito

6
推荐指数
2
解决办法
2万
查看次数