Можно ли получить доступ к методу класса обслуживания из функционального интерфейса в Spring Java 8?

#java #spring #functional-interface

#java #весна #функциональный интерфейс

Вопрос:

Я хочу получить доступ к методу класса обслуживания из функционального интерфейса в Spring Java 8. Возможно ли это?

 public interface UserProfile extends Supplier<UserProfileDto> {

//  This is working
    static UserProfile getMyId() {
        return () ->
                new UserProfileDto(
                        SecurityContextHolder.getContext().getAuthentication().getName(),
                        "", "", "");
    }

    static UserProfile getMyProfile() {
        return () -> 
    }
}

@Service("userProfileService")
public class UserProfileServiceImpl implements UserProfileService {

    private final UserProfileRepo userProfileRepo;

    @Autowired
    public UserProfileServiceImpl(@Qualifier("userProfileSql") UserProfileRepo userProfileRepo) {
        this.userProfileRepo = userProfileRepo;
    }

    @Override
    public Optional<UserProfileDto> getUserProfileById(String userId) {
        return userProfileRepo.selectUserProfileById(userId);
    }
}
 

Я хочу вызвать метод класса обслуживания «getUserProfileById(SecurityContextHolder.getContext().getAuthentication().getName())» в getMyProfile() в UserProfile. Возможно ли это?

Комментарии:

1. Нет, это невозможно.

2. Нет. Это интерфейсный метод, так что нет.

3. Вы можете определить статический член типа Function<String, UserProfile> in UserProfile , который вы устанавливаете из службы после его инициализации. Но это настолько нечисто, что я не буду публиковать это в качестве ответа.

4. Спасибо.. Если я использую SPEL для его решения. Возможно ли это? Заранее спасибо.

Ответ №1:

Нет, вы не можете получить доступ к методу класса обслуживания из функционального интерфейса