【问题标题】:How can I create an object of an a class that is present on an external jar in Spring Boot?如何在 Spring Boot 的外部 jar 中创建一个类的对象?
【发布时间】:2017-11-18 19:27:15
【问题描述】:

我目前正在学习Spring Boot,遇到了这个问题。我有一个处理身份验证的简单类,它存在于外部 jar(Aunthenticaion.class)中。这个外部类的字段只是用户名、密码和一个 url,它给了我一个基于这些凭据的身份验证。我要做的就是在编译时创建这个类的一个实例(通过传递这些凭据),因为当这个用户名、密码和 url 没有设置时,我的应用程序会抛出构建错误。

包 org.Authentication;

公共类认证{

String username;
String password;
String url;


public String getUserName() {
    return username;
}
public void setUserName(String username) {
    this.username = username;
}

public void setPassword(String password) {
    this.password = password;
}
public String getUrl() {
    return url;
}
public void setUrl(String url) {
    this.url = url;
}

public String GetToken(String username,String password,String url) {
    return TokenService.getToken(username,password,url);
}
}

上面是存在于外部 Jar 上的 Authentication 类。我知道肯定已经存在类似类型的问题,但我提前道歉,我们将非常感谢您的回复。

【问题讨论】:

  • 好吧,你可以像调用其他类一样调用它的构造函数:new Authentication()。然后你在创建的对象上调用它的方法。具体问题是什么?它只是一个类,就像任何其他类一样(除了它不遵守 Java 命名约定,并且它的字段没有任何用途)。
  • 也就是说,不,这段代码甚至不是有效的 Java 代码。调用方法时不传递参数的类型:TokenService.getToken(username, password, url)。你的问题实际上是关于这个的吗?如果是这样,我强烈建议您熟悉 Java,熟悉一些比 Spring Boot 应用程序简单得多的东西,因为 Spring Boot 是一个相当复杂的野兽。
  • TokenService.getToken(username, password, url) 以字符串的形式获取令牌。我在这个代码示例中省略了几个导入和这个 TokenService 类的一个实例。我不打算传递参数的类型,这只是不小心复制和粘贴的结果。
  • 好的。那么具体的问题是什么?
  • 所以你的问题是如何在不使用 XML 的情况下制作 Spring bean。您可以在配置类中使用 @Bean 注释来做到这一点。 docs.spring.io/spring/docs/current/spring-framework-reference/…

标签: java spring maven spring-boot annotations


【解决方案1】:

您可以通过静态或动态两种方式创建对象

静态

Class<?> clazz = Authentication.class;
// static call
Method getUserName = clazz.getMethod("getUserName"); 
String uname = (Stirng) getUserName.invoke(null /* static */);

动态

Constructor<?> ctor = clazz.getConstructor();
Object instance = ctor.newInstance();
Method print = clazz.getMethod("GetToken", String.class, String.class, 
String.class);
print.invoke(instance, uname,passwd,url);

【讨论】:

  • 我尝试按照类似的步骤创建一个对象,但我的构建总是失败,并且错误消息是用户名未设置。我相信我必须在编译期间使对象可用。
  • 在另一个示例应用程序中,有人在像&lt;bean id="authentication" class="org.Authentication"&gt; &lt;property name="username" value="xyz" /&gt; &lt;property name="password" value="***" /&gt; &lt;property name="url" value="sample.com" /&gt; &lt;/bean&gt; 这样的xml 文件中创建了一个bean 并自动装配了它。但我想在不使用 xml 的情况下实现相同的功能。谢谢。
  • @Yourfavouritenoob。我希望这个链接有帮助,theserverside.com/tutorial/…
猜你喜欢
  • 2017-06-21
  • 1970-01-01
  • 2015-06-16
  • 2018-05-23
  • 2021-07-05
  • 1970-01-01
  • 2019-06-12
  • 2016-08-02
  • 1970-01-01
相关资源
最近更新 更多