注入jar包里的对象,用@autowired的实例

注入的jar包如果不能直接使用 @autowired 来使用,可以采用如下方法:

@Configuration
public class DemoConfiguration {
  @Bean
  public Demo demo() {
    return new Demo(); //该对象为Jar包对象
  }
}

补充知识:引入第三方包 @Autowired Spring注入失败解决方案

一、问题背景

开发工程中,我负责的微服务需要依赖中台服务层,在调用该服务的功能接口时,@Autowired 注入方式启动报错:

Description:

Field clientRouter in com.baiwang.cloud.spush.client.SPushClient required a bean of type 'com.baiwang.cloud.spush.client.router.IClientRouter' that could not be found.

Action:

Consider defining a bean of type 'com.baiwang.cloud.spush.client.router.IClientRouter' in your configuration.

二、问题解决

1、@ComponentScan用来指定扫描的组建所在的包路径或class文件。在不指定参数的时候,SpringBoot的@ComponentScan默认会扫描同目录及同目录下级目录的类文件。所以,Spring注入第三方包,需要通过@ComponentScan 扫描需要注入的包。

第一个包名是当前服务的顶层目录包,第二个是依赖的第三方包已经成功注入。既然已经可以使用,所以我就模仿着添加了注入的包。

2、注入了新的包之后,启动依然报了错

同样的错误,根据错误我又找到对应的类,发现了上边扫描的路径只是interface层

于是我找到了实现的service层的包路径,同样注入了进去

这次启动又报了另一个错误

3、Field redisTemplate in com.baiwang.media.basic.cache.config.RedisConfig required a single bean, but 2 were found:

这个错误根据提示仔细想了想,应该就可以定位到了,RedisConfig这个类注入了RedisTemplate,Redis这个类使用频率还是挺多的,还有@Autowired是按照类型来注入的,所以上边扫描的包RedisTemplate这个类型存了两份。

由问题找问题,基础不牢固就要全部靠百度。@Qualifier @Primary这两个注解,@Qualifier注解的用处:当一个接口有多个实现的时候,为了指名具体调用哪个类的实现,可以指定名称,以名称的方式注入。用@Primary注解的Bean就要优先于其他的Bean,更多应用的是Service,这里使用@Qualifier就可以了

最后不出所料,成功启动!

三、最后

这样的扫描方式会显得很冗余,就简化了注入的包的顶层目录。

最后就是这样了,同样也要检查其他类型的注入是不是也会冲突!!!

还有,依赖第三方注入还需要这个:

以上这篇注入jar包里的对象,用@autowired的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 彻底搞明白Spring中的自动装配和Autowired注解的使用

    一.自动装配 当Spring装配Bean属性时,有时候非常明确,就是需要将某个Bean的引用装配给指定属性.比如,如果我们的应用上下文中只有一个org.mybatis.spring.SqlSessionFactoryBean类型的Bean,那么任意一个依赖SqlSessionFactoryBean的其他Bean就是需要这个Bean.毕竟这里只有一个SqlSessionFactoryBean的Bean. 为了应对这种明确的装配场景,Spring提供了自动装配(autowiring).与其显式的装配

  • Spring中@Autowire注入的深入讲解

    一直在思考spring的@Autowire注入属性时到底是按类型注入还是按名称注入,今天写了一个测试来证明一下. 定义接口TestService public interface TestService { void test(); } 定义接口实现:TestServiceImpl1和TestServiceImpl2 @Service public class TestServiceImpl1 implements TestService { public void test() { Syste

  • 详解spring boot引入外部jar包的坑

    前言:由于项目需求,短信验证码的接口需要换成阿里大于的,但是尴尬的发现阿里大于的jar包没有maven版本的,于是便开始了一上午的操蛋引包之路.按照套路来说,自然应该是百度一波,但是百度了好久,找了好多方案之后发现,没一个有用的,而且文章的抄袭.拷贝十分严重,试了N种方案,都是错的,都没有将外部jar包打包到BOOK-INF文件夹下.最终,在第N次尝试之后,终于在打的jar包里将外部的jar包导入进来.特此记录下,防止再犯!!! 首先在新建libs文件夹(根目录或者resource目录下都可以)

  • 注入jar包里的对象,用@autowired的实例

    注入的jar包如果不能直接使用 @autowired 来使用,可以采用如下方法: @Configuration public class DemoConfiguration { @Bean public Demo demo() { return new Demo(); //该对象为Jar包对象 } } 补充知识:引入第三方包 @Autowired Spring注入失败解决方案 一.问题背景 开发工程中,我负责的微服务需要依赖中台服务层,在调用该服务的功能接口时,@Autowired 注入方式启动

  • 将本地的jar包打到Maven的仓库中实例

    Java代码 mvn install:install-file -DgroupId=包名 -DartifactId=项目名 -Dversion=版本号 -Dpackaging=jar -Dfile=jar文件所在路径 以pinyin4j-2.5.0为例: 1.将pinyin4j-2.5.0.jar文件放在"D:\JAR_LIB"目录下(该目录任意) 2.执行命令: mvn install:install-file -Dfile=D:\JAR_LIB\pinyin4j-2.5.0.jar

  • idea maven项目无法识别jar包里的class解决方案

    idea maven不识别jar包的class 我用new project from exit source ,项目依赖下载完成后install能成功,项目也能运行. 但是代码所有用到第三方库的地方都报错 无法识别jar里的class,如图所示: 解决办法 使用 import project . 导入项目的时候选择pom.xml文件,别选项目文件夹应该就不会出现这个问题了 idea maven打包失败,找不到引用的jar文件的类 在开发环境下Maven一切运行顺利,可是打包时就报错,说是找不到符

  • 动态上传jar包热部署的实战详解

    目录 定义简单的接口 该接口的一个简单的实现 反射方式热部署 注解方式热部署 测试 近期开发系统过程中遇到的一个需求,系统给定一个接口,用户可以自定义开发该接口的实现,并将实现打成jar包,上传到系统中.系统完成热部署,并切换该接口的实现. 定义简单的接口 这里以一个简单的计算器功能为例,接口定义比较简单,直接上代码. public interface Calculator {     int calculate(int a, int b);     int add(int a, int b);

  • dom4j从jar包中读取xml文件的方法

    进行封装的时候,我们常常需要用xml来定义一些规范,在单独运行读取的时候当然不会有问题,但这些xml是往往是放在jar包里的,这样一来,这些东西就找不出来了.文中用到的xml定义如下: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><ACCESOS> <item>  <SOCIO name="adsf">   <NUMERO>00045

  • 详解Android studio如何导入jar包方法

    下面我就总结一下Android studio大家在导入jar包时遇到的一些问题和解决方法: 1,首先先说一下怎么在AS 中找到sdk,jdk,ndk的安装路径,可能一部分人一开始找不到,下面贴出方法: Android studio 中更改sdk的路径,如下图,在右边红色方框中更改sdk的路径 还有一种更好的方式可以把sdk,jdk,ndk的路径全部找到,首先File---Other Settings---Default Project Structure...,打开如下图界面,从红方框处即可直接

  • maven下载jar包改用阿里云maven库的方法

    本文介绍了maven下载jar包改用阿里云maven库的方法,分享给大家,具体如下: 修改maven安装路径中conf文件夹下的setting.xml文件 <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> &l

  • 修改jar包package目录结构操作方法

    为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 包的作用 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用了树形目录的存储方式.同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别.因此,包可以避免名字冲突. 3.包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类. Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位

  • java打jar包的几种方式详解

    一.制作只含有字节码文件的jar包 我们先来看只含有字节码文件,即只含有class文件的jar包怎么制作,这是最简单的形式 1.最简单的jar包--直接输出hello 最终生成的jar包结构 META-INF Hello.class 方法步骤 (1)用记事本写一个Hello.java的文件 class Hello{     public static void main(String[] agrs){         System.out.println("hello");     }

随机推荐