java - 不能访问接口实现类中的公共方法(只能访问接口中声明的方法)
问题描述
我有一个接口和这个接口的两个实现。
- EmailTokenServiceImpl
- ResetPasswordTokenServiceImpl
接口只包含一个名为generateToken()
在我的一个实现类中,ResetPasswordTokenServiceImpl
我又添加了一个名为exampleMethod()
.
现在的问题是,当我在控制器类中自动连接具有额外方法的服务时,我无法调用exampleMethod()
接口声明:
public interface TokenService {
/**
* Generate verification token for given user.
*
* @param user the user entity
* @return the verification token
*/
public VerificationToken generateToken(User user);
}
第一服务:
@Service(value = "emailTokenService")
public class EmailTokenServiceImpl implements TokenService {
@Value("${email.token.expiration.hours}")
private int expirationIn;
/**
* Generate Token for email verification {@link EmailVerificationToken}
* @return VerificationToken token
*/
@Override
public EmailVerificationToken generateToken(User user) {
EmailVerificationToken token = new EmailVerificationToken();
token.setToken(generateHash());
token.setExpirationDate(getExpirationDate());
token.setUser(user);
return token;
}
二服务:
@Service(value = "resetPasswordService")
public class ResetPasswordTokenServiceImpl implements TokenService {
@Override
public ResetPasswordToken generateToken(User user) {
ResetPasswordToken token = new ResetPasswordToken();
token.setToken(generateHash());
token.setExpirationDate(getExpirationDate());
token.setUser(user);
return token;
}
public String exampleMethod() {
return "example";
}
控制器(试图访问exampleMethod()
):
@RestController
@RequestMapping("/api/auth")
public class SecurityController {
private static final Logger logger = LoggerFactory.getLogger(JwtAuthenticationEntryPoint.class);
private AuthenticationManager authenticationManager;
private JwtTokenProvider tokenProvider;
private UserService userService;
private TokenService resetPasswordService;
@Autowired
public SecurityController(
AuthenticationManager authenticationManager,
JwtTokenProvider tokenProvider,
UserService userService,
TokenService resetPasswordService) {
this.authenticationManager = authenticationManager;
this.tokenProvider = tokenProvider;
this.userService = userService;
this.resetPasswordService = resetPasswordService;
}
@GetMapping("/reset-password/{token}")
public ResponseEntity<?> resetPasswordRequest(@PathVariable(value = "token") String token) {
String example = resetPasswordService.exampleMethod();
return new ResponseEntity<>(HttpStatus.OK);
}
为什么我无法调用该exampleMethod()
方法?
我必须在我的界面中声明它吗?
解决方案
接口TokenService
没有声明方法exampleMethod()
。所以你不能调用那个方法。((ResetPasswordTokenServiceImpl)resetPasswordService).exampleMethod();
如果resetPasswordService
是ResetPasswordTokenServiceImpl
. _
如果将该方法添加到接口,则所有实现TokenService
都必须实现该方法。例如,EmailTokenServiceImpl
不声明该方法。
推荐阅读
- json - 为什么我的文本字符串会给出两个不同的 Sha 256 结果?
- c# - 如何在 UWP 和 WinUi 中更改应用程序主题
- python - 由于磁盘访问限制 MAC,Python 无法导入模块
- mysql - 选择外键引用哪个主键
- linux - SonarQube 8.9 无法启动,登录后加载页面被阻止
- json - Flutter - 参数类型'Object'不能分配给参数类型'Map
' - c# - 使用 C# 在 Excel 中更改日期格式
- android - 为什么在 onCreate() 方法中初始化 Array Adapter 很重要?
- javascript - TailwindCSS / PurgeCSS 白名单不起作用
- c++ - 如何在C++中用'/'分割字符串