我的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?
更好的是,还有更好的方法来连接它吗?谢谢! :)
答案 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
对象注入到类中,而不是让类依赖于TwitterAuth
。 TwitterAuth
的构造函数和setter注入将在Spring调用getTwitter()
方法之前完成。
您可以更改TwitterAuth
以实施FactoryBean,而不是使用实例工厂方法。优点是XML少一点。缺点是Java源代码更依赖于Spring。