在Spring中连接Twitter类的Twitter4j

时间:2009-08-30 16:53:51

标签: spring

我的Spring容器中只需要Twitter4j中的一个Twitter类实例。我的问题是我无法在Twitter类中设置oauth消费者。据我所知,您只能使用只接受一个参数的setter方法进行连线。不是两个。例如,有人认为我无法连接这样的东西:

Twitter twitter = new Twitter();
twitter.setOAuthConsumer([consumer key],[consumer secret]);

当然,我想避免硬编码使用D.I的消费者密钥和消费者秘密。我想。

我的解决方案是将twitter类封装在另一个类中,这样我就可以逐个连接消费者密钥和消费者密钥:

public class TwitterAuth {
    private Twitter twitter;
    public TwitterAuth(Twitter twitter, consumerKey, consumerSecret) {
      this.twitter=twitter;
      twitter.setOauthConsumer(consumerKey,consumerSecret);
    }
    public void getTwitter(){
       return twitter;
    }
}

虽然它确实解决了我的问题,但它给了我另一个问题。一旦注入twitter类,我就不再需要TwitterAuth了。我如何丢弃TwitterAuth?

更好的是,还有更好的方法来连接它吗?谢谢! :)

1 个答案:

答案 0 :(得分:3)

  

我不再需要TwitterAuth了   一旦twitter类被注入。   我如何丢弃TwitterAuth?

我不担心丢弃TwitterAuth。一旦没有引用它,它最终将被垃圾收集。无论哪种方式,它都没有大的内存占用。

您无需让代码依赖于TwiterAuth。相反,您可以告诉Spring使用instance factory method创建Twitter对象。首先,您需要对TwitterAuth稍作修改,以便创建Twitter对象:

public class TwitterAuth {
    private final Twitter twitter;
    public TwitterAuth(String consumerKey, String consumerSecret) {
      this.twitter = new Twitter();
      twitter.setOauthConsumer(consumerKey, consumerSecret);
    }
    public Twitter getTwitter() {
       return twitter;
    }
}

如果TwitterAuth的bean名称为"twitterAuth",则此XML将TwitterAuth.getTwitter()配置为工厂方法:

<bean id="twitter"
      factory-bean="twitterAuth"
      factory-method="getTwitter"/>

然后,您可以直接将Twitter对象注入到类中,而不是让类依赖于TwitterAuthTwitterAuth的构造函数和setter注入将在Spring调用getTwitter()方法之前完成。

您可以更改TwitterAuth以实施FactoryBean,而不是使用实例工厂方法。优点是XML少一点。缺点是Java源代码更依赖于Spring。