twitter自定义api

SpringBoot提供了许多启动器模块来快速启动和运行。 SpringBoot的自动配置机制负责根据各种标准代表我们配置SpringBean。

除了Core Spring Team提供的现成的springboot启动器之外,我们还可以创建自己的启动器模块。

在本文中,我们将研究如何创建自定义SpringBoot入门程序。 为了演示它,我们将创建twitter4j-spring-boot-starter ,它将自动配置Twitter4J bean。

为此,我们将创建:

  1. twitter4j-spring-boot-autoconfigure模块,其中包含Twitter4J AutoConfiguration bean定义
  2. twitter4j-spring-boot-starter模块,用于获取twitter4j-spring-boot-autoconfiguretwitter4j-core依赖项
  3. 使用twitter4j-spring-boot-starter的示例应用程序

创建父模块spring-boot-starter-twitter4j

首先,我们将创建一个父pom类型模块,以定义依赖项版本和子模块。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sivalabs</groupId><artifactId>spring-boot-starter-twitter4j</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><name>spring-boot-starter-twitter4j</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><twitter4j.version>4.0.3</twitter4j.version><spring-boot.version>1.3.2.RELEASE</spring-boot.version></properties><modules><module>twitter4j-spring-boot-autoconfigure</module><module>twitter4j-spring-boot-starter</module><module>twitter4j-spring-boot-sample</module></modules><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.twitter4j</groupId><artifactId>twitter4j-core</artifactId><version>${twitter4j.version}</version></dependency></dependencies></dependencyManagement></project>

在此pom.xml中,我们在部分中定义了SpringBoot和Twitter4j版本,因此我们无需在所有地方都指定版本。

创建twitter4j-spring-boot-autoconfigure模块

在我们的父Maven模块spring-boot-starter-twitter4j中创建一个名为twitter4j-spring-boot-autoconfigure的子模块。

添加Maven依赖项,例如spring-boot, spring-boot-autoconfiguretwitter4j-corejunit ,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sivalabs</groupId><artifactId>twitter4j-spring-boot-autoconfigure</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><parent><groupId>com.sivalabs</groupId><artifactId>spring-boot-starter-twitter4j</artifactId><version>1.0-SNAPSHOT</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>org.twitter4j</groupId><artifactId>twitter4j-core</artifactId><optional>true</optional></dependency></dependencies>
</project>

请注意,我们已将twitter4j-core指定为可选依赖项,因为仅当将twitter4j-spring-boot-starter添加到项目时,才应将twitter4j-core添加到项目中。

创建Twitter4jProperties来保存Twitter4J配置参数

创建Twitter4jProperties.java来保存Twitter4J OAuth配置参数。

package com.sivalabs.spring.boot.autoconfigure;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;@ConfigurationProperties(prefix= Twitter4jProperties.TWITTER4J_PREFIX)
public class Twitter4jProperties {public static final String TWITTER4J_PREFIX = "twitter4j";private Boolean debug = false;@NestedConfigurationPropertyprivate OAuth oauth = new OAuth();public Boolean getDebug() {return debug;}public void setDebug(Boolean debug) {this.debug = debug;}public OAuth getOauth() {return oauth;}public void setOauth(OAuth oauth) {this.oauth = oauth;}public static class OAuth {private String consumerKey;private String consumerSecret;private String accessToken;private String accessTokenSecret;public String getConsumerKey() {return consumerKey;}public void setConsumerKey(String consumerKey) {this.consumerKey = consumerKey;}public String getConsumerSecret() {return consumerSecret;}public void setConsumerSecret(String consumerSecret) {this.consumerSecret = consumerSecret;}public String getAccessToken() {return accessToken;}public void setAccessToken(String accessToken) {this.accessToken = accessToken;}public String getAccessTokenSecret() {return accessTokenSecret;}public void setAccessTokenSecret(String accessTokenSecret) {this.accessTokenSecret = accessTokenSecret;}}
}

使用此配置对象,我们可以在application.properties中配置twitter4j属性,如下所示:

twitter4j.debug=true
twitter4j.oauth.consumer-key=your-consumer-key-here
twitter4j.oauth.consumer-secret=your-consumer-secret-here
twitter4j.oauth.access-token=your-access-token-here
twitter4j.oauth.access-token-secret=your-access-token-secret-here

创建Twitter4jAutoConfiguration以自动配置Twitter4J

这是我们启动器的关键部分。

Twitter4jAutoConfiguration配置类包含将根据某些条件自动配置的Bean定义。

那是什么标准?

  • 如果twitter4j.TwitterFactory .class在类路径上
  • 如果尚未明确定义TwitterFactory bean

因此, Twitter4jAutoConfiguration像这样。

package com.sivalabs.spring.boot.autoconfigure;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.conf.ConfigurationBuilder;@Configuration
@ConditionalOnClass({ TwitterFactory.class, Twitter.class })
@EnableConfigurationProperties(Twitter4jProperties.class)
public class Twitter4jAutoConfiguration {private static Log log = LogFactory.getLog(Twitter4jAutoConfiguration.class);@Autowiredprivate Twitter4jProperties properties;@Bean@ConditionalOnMissingBeanpublic TwitterFactory twitterFactory(){if (this.properties.getOauth().getConsumerKey() == null|| this.properties.getOauth().getConsumerSecret() == null|| this.properties.getOauth().getAccessToken() == null|| this.properties.getOauth().getAccessTokenSecret() == null){String msg = "Twitter4j properties not configured properly." + " Please check twitter4j.* properties settings in configuration file.";log.error(msg);throw new RuntimeException(msg);}ConfigurationBuilder cb = new ConfigurationBuilder();cb.setDebugEnabled(properties.getDebug()).setOAuthConsumerKey(properties.getOauth().getConsumerKey()).setOAuthConsumerSecret(properties.getOauth().getConsumerSecret()).setOAuthAccessToken(properties.getOauth().getAccessToken()).setOAuthAccessTokenSecret(properties.getOauth().getAccessTokenSecret());TwitterFactory tf = new TwitterFactory(cb.build());return tf;}@Bean@ConditionalOnMissingBeanpublic Twitter twitter(TwitterFactory twitterFactory){return twitterFactory.getInstance();}}

我们使用@ConditionalOnClass({TwitterFactory.class,Twitter.class})来指定仅当存在TwitterFactory.class,Twitter.class类时才进行此自动配置。

我们还在bean定义方法上使用了@ConditionalOnMissingBean ,以指定仅当未明确定义TwitterFactory / Twitter bean时才考虑使用此bean定义。

还要注意,我们已经使用@EnableConfigurationProperties(Twitter4jProperties.class)进行了注释,以启用对ConfigurationProperties的支持并注入了Twitter4jProperties bean。

现在,我们需要在src / main / resources / META-INF / spring.factories文件中配置自定义Twitter4jAutoConfiguration ,如下所示:

org.springframework.boot.autoconfigure.EnableAutoConfiguration =
com.sivalabs.spring.boot.autoconfigure.Twitter4jAutoConfiguration

创建twitter4j-spring-boot-starter模块

在我们的父Maven模块spring-boot-starter-twitter4j中创建一个名为twitter4j-spring-boot-starter的子模块。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sivalabs</groupId><artifactId>twitter4j-spring-boot-starter</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><parent><groupId>com.sivalabs</groupId><artifactId>spring-boot-starter-twitter4j</artifactId><version>1.0-SNAPSHOT</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>com.sivalabs</groupId><artifactId>twitter4j-spring-boot-autoconfigure</artifactId><version>${project.version}</version></dependency><dependency><groupId>org.twitter4j</groupId><artifactId>twitter4j-core</artifactId></dependency></dependencies></project>

请注意,在这个Maven模块中,我们实际上是引入twitter4j-core依赖性。

我们不需要在此模块中添加任何代码,但可以选择在src / main / resources / META-INF / spring.provides文件中指定通过此启动程序提供的依赖 ,如下所示:

提供:twitter4j-core

这就是我们的入门者。

让我们使用全新的启动程序twitter4j-spring-boot-starter创建示例。

创建twitter4j-spring-boot-sample示例应用程序

让我们创建一个简单的SpringBoot应用程序,并添加我们的twitter4j-spring-boot-starter依赖项。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sivalabs</groupId><artifactId>twitter4j-spring-boot-sample</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.3.2.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><dependencies><dependency><groupId>com.sivalabs</groupId><artifactId>twitter4j-spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

创建入口点类SpringbootTwitter4jDemoApplication ,如下所示:

package com.sivalabs.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringbootTwitter4jDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringbootTwitter4jDemoApplication.class, args);}
}

创建TweetService ,如下所示:

package com.sivalabs.demo;import java.util.ArrayList;
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;@Service
public class TweetService {@Autowiredprivate Twitter twitter;public List<String> getLatestTweets(){List<String> tweets = new ArrayList<>();try {ResponseList<Status> homeTimeline = twitter.getHomeTimeline();for (Status status : homeTimeline) {tweets.add(status.getText());}} catch (TwitterException e) {throw new RuntimeException(e);}return tweets;}
}

现在创建一个测试以验证我们的Twitter4j AutoConfigutation。

在此之前,请确保已将twitter4j oauth配置参数设置为实际值。 您可以从https://apps.twitter.com/获得它们

package com.sivalabs.demo;import java.util.List;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import twitter4j.TwitterException;@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(SpringbootTwitter4jDemoApplication.class)
public class SpringbootTwitter4jDemoApplicationTest  {@Autowiredprivate TweetService tweetService;@Testpublic void testGetTweets() throws TwitterException {List<String> tweets = tweetService.getLatestTweets();for (String tweet : tweets) {System.err.println(tweet);}}}

现在,您应该能够在控制台输出中看到最新的推文。

  • 您可以在GitHub上找到代码: https//github.com/sivaprasadreddy/twitter4j-spring-boot-starter

翻译自: https://www.javacodegeeks.com/2016/02/creating-custom-springboot-starter-twitter4j.html

twitter自定义api

twitter自定义api_为Twitter4j创建自定义SpringBoot Starter相关推荐

  1. 为Twitter4j创建自定义SpringBoot Starter

    SpringBoot提供了许多启动器模块来快速启动和运行. SpringBoot的自动配置机制负责根据各种标准代表我们配置SpringBean. 除了Core Spring Team提供的现成的spr ...

  2. 自定义表单mysql_创建自定义表单

    自定义表单模块,用于收集访问前端的用户的信息. 自定义表单能够用于创建用户交互界面,用户提交的信息保存在Orchard站点中,能够随时导出. 打开Custom Forms模块 Custom Forms ...

  3. sharepoint2010 创建自定义列表

    sharepoint2010 创建自定义列表 分类: sharepoint20102014-04-04 14:06 106人阅读 评论(0) 收藏 举报 转:http://boke.25k5.com/ ...

  4. Qt Creator创建自定义效果和材质

    Qt Creator创建自定义效果和材质 创建自定义效果和材质 创建自定义效果 创建自定义材料 创建着色器文件 创建自定义效果和材质 " Qt Quick 3D效果"和" ...

  5. Android官方开发文档Training系列课程中文版:动画视图之创建自定义转场动画

    原文地址:http://android.xsoftlab.net/training/transitions/custom-transitions.html 自定义转场可以创建自定义动画.比如,可以定义 ...

  6. linux新建自定义命令,Linux 创建自定义命令

    Linux 创建自定义命令 Linux 可以创建自定义使用命令 这里我们采取使用"alias"命令.这里我们首先了解两个文件,通过这两个文件我们可以根据环境配置相应的自定义命令. ...

  7. 使用 CSS 创建自定义鼠标游标

    使用 CSS 创建自定义鼠标游标 使用 CSS 创建自定义鼠标游标 1. CSS 中的游标概述 2. 如何用 CSS 创建一个自定义游标 3. 如何用 JavaScript 创建自定义游标 4. 浏览 ...

  8. MATLAB强化学习实战(十二) 创建自定义强化学习算法的智能体

    创建自定义强化学习算法的智能体 创建环境 定义策略 自定义智能体类 智能体属性 构造函数 相关函数 可选功能 创建自定义智能体 训练自定义智能体 自定义智能体仿真 本示例说明如何为您自己的自定义强化学 ...

  9. 如何使用Bootstrap4和ES6创建自定义确认框

    by Prashant Yadav 通过Prashant Yadav 如何使用Bootstrap4和ES6创建自定义确认框 (How to create a custom confirm box wi ...

最新文章

  1. windows平台编译vlc
  2. 为什么会用这个工具的产品经理,越来越值钱?
  3. maven 热部署 web应用
  4. 项目部署—连接不上远程redis服务怎么办?
  5. 第一个程序(python)-helloworld_创建第一个python程序:‘Hello World!’
  6. java调用lua 路径_luacom打开中文路径的Word文件
  7. (7)zabbix资产清单inventory管理
  8. word 在试图打开时遇到错误 以及word文档的修复
  9. 2013 年 2 月专访董明珠
  10. 谷歌浏览器屏蔽百度热点搜索
  11. ui设计师必须了解的13中移动app界面设计的基础知识
  12. redis cli命令详解
  13. 如何练就超强的学习能力?这才是最好的答案
  14. 1.12 DICOM彩色图像
  15. 谷歌pay服务端文档_米大师服务端说明
  16. Mysql数据库快速插入亿级数据
  17. 全球搜索引擎排名百度第三
  18. ArcGIS多条件下进行城市选房分析
  19. 一缕黑暗中的火光-----------构件图--------------优雅的建模语言
  20. 分享b2b2c带商家入驻中英繁多语言海外电商带商品库一键铺货商城源码

热门文章

  1. 2021牛客OI赛前集训营-提高组(第五场)C-第K排列【dp】
  2. P3702-[SDOI2017]序列计数【矩阵乘法】
  3. jzoj4017-逃跑【0/1分数规划,线段树,dp】
  4. Ch5501-环路运输【环形处理dp】
  5. 2021牛客暑期多校训练营7 J-xay loves Floyd(最短路+bitset优化集合交)
  6. 【树状数组】递增子序列(金牌导航 数据结构优化DP-1)
  7. 图书管理员【2017年普及组第二题】
  8. poj3648 Wedding 2-sat
  9. MySQL UPDATE 语句一个“经典”的坑
  10. JavaFX UI控件教程(二十)之HTML Editor