解决@Autowired注⼊static接⼝的问题
⽬录
@Autowired注⼊static接⼝问题
@Autowired⾃动注⼊普通service很⽅便
但是如果注⼊static修饰的service则注⼊不了
后来⽹上百度了⼀下,看到了⼀个⽅法
标签解释
导致@Autowired注⼊失败的问题
背景
原因
@Autowired注⼊static接⼝问题
@Autowired⾃动注⼊普通service很⽅便
如:
@Component
public class WarningMatterUtil {
//报警表
@Autowired
private IDScypWarningMatterService warningMatterService;
public void dScypWarningMatterFZ(){
}
}
但是如果注⼊static修饰的service则注⼊不了
如:resource和autowired注解的区别
@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知道这⼀点⾮常关键位置不同,扫描不到对应位置下的注解。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。