栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

非controller使用@Autowired注解注入为null问题(如工具类,拦截器)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

非controller使用@Autowired注解注入为null问题(如工具类,拦截器)

出现场景如下
场景一、工具类一般都是静态方法,但是静态方法没办法使用容器注入的对象。
知识点:静态方法:要求该属性也要是静态的,Spring/SpringBoot正常情况下不能支持注入静态属性

场景二、这个类是被new出来的实例。
知识点:new 过的对象不会交给容器, 里面的 service或者dao注入不进来。一般是指引用某些框架,你是继承某个接口,但是这些框架默认new过这个方法,比如MVC拦截的HandlerInterceptor类。

以上可以说是在项目中遇到的问题,比如项目中遇到的难点或者问题

@Component
public class TestUtils {
    @Autowired
    private ItemService itemService;
 
    @Autowired
    private ItemMapper itemMapper;
 
    public static TestUtils testUtils;
 
    @PostConstruct
    public void init() {
    	//把本身的类进行初始化
        testUtils = this;
    }
}
//外部所要调用的方法
public static void test(Item record){
    testUtils.itemMapper.insert(record);
    testUtils.itemService.queryAll();
}

结果:可以在controller层不注入该类。就可以直接使用test方法(对于工具类而言方便)或者做到尽管是new出来的对象也能使用注入的对象

@PostConstruct注解:
首先这个注解是由Java提供的,它用来修饰一个非静态的void方法,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。

简单来说,就是初始化的时候顺便把带有这个注解的方法初始化了。主要用法。用来实例化本类对象塞进容器里面

特性
1、只有一个非静态方法能使用此注解

2、被注解的方法不得有任何参数

3、被注解的方法返回值必须为void

4、被注解方法不得抛出已检查异常

5、此方法只会被执行一次

可能出现的问题
使用此注解时会影响服务启动时间。服务启动时会扫描WEB-INF/classes的所有文件和WEB-INF/lib下的所有jar包。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/842787.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号