解决@Autowired注入static接口的问题
作者:happy_Pinocchio 发布时间:2022-01-02 03:16:29
@Autowired注入static接口问题
@Autowired自动注入普通service很方便
如:
@Component
public class WarningMatterUtil {
//报警表
@Autowired
private IDScypWarningMatterService warningMatterService;
public void dScypWarningMatterFZ(){
}
}
但是如果注入static修饰的service则注入不了
如:
@Component
public class WarningMatterUtil {
//报警表
@Autowired
private static IDScypWarningMatterService warningMatterService;
public static void dScypWarningMatterFZ(){
}
}
后来网上百度了一下,看到了一个方法
修改后代码如下:
@Component
public class WarningMatterUtil {
//报警表
@Autowired
private IDScypWarningMatterService warningMatterService;
private static WarningMatterUtil warningMatterUtil;
@PostConstruct
public void init() {
warningMatterUtil = this;
warningMatterUtil.warningMatterService = this.warningMatterService;
}
/**
* 赋值方法
*
*/
public static void dScypWarningMatterFZ(){
}
}
标签解释
@Autowired
:作用于构建器、属性、方法。按byType自动注入。(@Resource默认按 byName自动注入)@PostConstruct
:被@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。(PreDestroy()方法在destroy()方法执行执行之后执行)
导致@Autowired注入失败的问题
背景
在一次测试当中,发现 @Autowired 无法注入的问题,使用service时,发现为null!
原因
总结了一些会导致@Autowired无法注入的原因:
@Autowired
private static TestService testService;
被static所修饰,Spring依赖注入是依赖set方法,而set方法是普通的对象方法,static变量是类的属性,所以无法完成注入操作
@Autowired按type进行自动注入,简单说就是,private TestService testService,是按照TestService 类型进行匹配注入,name可以不一致,如果匹配不到对应的类型,也会出现注入失败。
一般来说就是没有被ioc容器进行管理,在容器中匹配不到type,需要注解(@Service,@repository,@Component等)纳入spring IOC容器中
还有一种情况,当所有注解正常,可能是因为SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!“Application类”是指SpringBoot项目入口类。
这个类的位置很关键:
如果Application类所在的包为:com.boot.app,则只会扫描com.boot.app包及其所有子包,如果service或dao所在包不在com.boot.app及其子包下,则不会被扫描!即, 把Application类放到dao、service所在包的上级,com.boot.Application知道这一点非常关键位置不同,扫描不到对应位置下的注解。
来源:https://blog.csdn.net/happy_Pinocchio/article/details/50857917


猜你喜欢
- 数据传输在Android开发过程中,我们常常通过Intent在各个组件之间传递数据。例如在使用startActivity(android.c
- /// <summary> /// 安装的excel的版本,0为没有安装,大于1说明安装了多个. /// </summar
- 众所周知,android里面我们很熟悉的一个功能,侧滑菜单效果在以前我们大部分都是用的slidingmenu这个开源框架,自从谷歌官方新出的
- 在C# winform应用程序中,用以下代码可以进行一些内存使用的优化using System;using System.Diagnosti
- 一、创建字符串创建字符串的方式有三种:// 方式一String str = "Hello Bit";// 方式二Stri
- 本文实例为大家分享了Unity实现攻击范围检测并绘制检测区域的具体代码,供大家参考,具体内容如下一、圆形检测using System.Col
- 本文章从头开始介绍Spring集成Redis的示例。Eclipse工程结构如下图为我的示例工程的结构图,采用Maven构建。其中需要集成Sp
- 实践过程效果代码public partial class Form1 : Form {
- ImageView是用于界面上显示图片的控件。属性1、为ImageView设置图片①android:src="@drawable/
- 废话不多说了,给大家贴关键代码了,具体代码如下所示:import java.io.File;import java.io.FileOutpu
- EntityWrapper使用解析1、项目中引入jar包,我这里使用Maven构建<dependency> &nbs
- 1、Java版package com.lyz.utils.common; import java.io.UnsupportedEncodin
- android大家都有很多需要用户上传头像的需求,有的是选方形,有的是圆角矩形,有的是圆形。首先我们要做一个处理图片的自定义控件,把传入的图
- 介绍跨域CORS,全称是"跨域资源共享"(Cross-origin resource sharing)当页面发出跨域请求
- 本文中我将介绍一下我自己封装的一个小的工具类库:按钮点击事件类库。作用:该类库可以防止按钮重复点击,可以判断网络状态,可以判断用户登录状态,
- 一、概念HttpClientAndroid 6中移除(API数量多扩展困难)。HttpURLConnection目前官方集成的。OKHttp
- 本文实例讲述了Spring Bean的初始化和销毁。分享给大家供大家参考,具体如下:一 点睛在开发过程中,经常遇到在Bean使用之前或者之后
- Unity中的PostProcessScene:深入解析与实用案例在Unity游戏开发中,我们经常需要对场景进行后处理,以实现更丰富的视觉效
- Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中。然而 XML 配置文件需要通过 D
- 本文实例为大家分享了Android系统工具类的具体代码,供大家参考,具体内容如下系统工具类public class systemUtil {