为什么在Controller中对第三方Twitter类使用@Autowire注解无法自动注入?
这个问题来自于《master springMVC 4》这本书的源码,用SpirngBoot 2搭建的环境,根据我的理解,@Autowired注解一般无法对第三方包下面的类直接进行注入(我们无法保证第三方提供的类已经加上@Component,并且包路径可以被自动扫描),实例中对org.springframework.social.twitter.api.Twitter接口加了@Autowired注解,其实现类为TwitterTemplate,构造方法的两个参数TwitterTemplate(key,secretToken)来自于Application.properties的配置,根据实际测试,下面的代码不能正常工作。
代码如下:
package com.labs.app.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.social.twitter.api.SearchOperations;
import org.springframework.social.twitter.api.SearchResults;
import org.springframework.social.twitter.api.Twitter;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
public class TweetController {
@Autowired
private Twitter twitter;
@RequestMapping("/")
public String hello(@RequestParam(defaultValue="sb01") String search, Model model){
SearchOperations so = twitter.searchOperations();
String text = "INIT";
if(null!=so){
SearchResults sr = so.search(search);
text = sr.getTweets().get(0).getText();
}
model.addAttribute("message", text);
return "resultPage";
}
}
得到的错误信息如下:
Description:
Field twitter in com.labs.drivingschool.controller.TweetController required a bean of type 'org.springframework.social.twitter.api.Twitter' that could not be found.
Action:
Consider defining a bean of type 'org.springframework.social.twitter.api.Twitter' in your configuration.
为什么在Controller中对第三方DiscoverryClient类使用@Autowire注解无法自动注入?
这个问题来自于《master springMVC 4》这本书的源码,用SpirngBoot 2搭建的环境,根据我的理解,@Autowired注解一般无法对第三方包下面的类直接进行注入(我们无法保证第三方提供的类已经加上@Component,并且包路径可以被自动扫描),实例中对 org.springframework.cloud.client.discovery.DiscoveryClient;
接口加了@Autowired注解,其实现类为EurekaDiscoveryClient,构造方法的两个参数EurekaDiscoveryClient(EurekaInstanceConfig config, EurekaClient eurekaClient)
来自于
com.netflix.appinfo.EurekaInstanceConfig;
com.netflix.discovery.EurekaClient;
由源码知道第三方类没有加@Component注解,也不能保证第三方类的包路径可以被自动扫描