解决非controller使用@Autowired注解注入为null问题

在SpringMVC框架中,我们经常要使用@Autowired注解注入Service或者Mapper接口,我们也知道,在controller层中注入service接口,在service层中注入其它的service接口或者mapper接口都是可以的,但是如果我们要在我们自己封装的Utils工具类中或者非controller普通类中使用@Autowired注解注入Service或者Mapper接口,直接注入是不可能的,因为Utils使用了静态的方法,我们是无法直接使用非静态接口的,当我们遇到这样的问题,我们就要想办法解决了。

我们有两种方法解决这个问题,第一种是注解方式,第二种是xml配置方式,下面是我们在utils中使用@Autowired注解的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Component 
public class TestUtils {
    @Autowired
    private ItemService itemService;
     
    @Autowired
    private ItemMapper itemMapper;
     
    public static TestUtils testUtils;
     
    @PostConstruct
    public void init() {    
        testUtils = this;
    
     
    //utils工具类中使用service和mapper接口的方法例子,用"testUtils.xxx.方法" 就可以了      
    public static void test(Item record){
        testUtils.itemMapper.insert(record);
        testUtils.itemService.queryAll();
    }
}

我们在init方法中使用以下注解就可以了,时间上这个init()的方法是可以自己随便定义的,注意:inti()方法里面不用写任何东西,跟我这样的就绝对ok了,不用看网上其他人瞎掰!

1
@PostConstruct

第二种方法就是xml配置的方式,也是很简单的,我们可以把init()方法上的@PostConstruct注解去掉,在spring-comtext.xml中配置以下bean就好了,里面什么内容都不用写,是不是很简单?

1
<bean id="testUtils" class="这里写utils类的包全路径名" init-method="init"></bean>

网上的其它资料都是扯淡,用我这两种方式就绝对ok了。

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/javaweb/2016/1124/30.html

posted on   Andy.zhu  阅读(3079)  评论(0编辑  收藏  举报

编辑推荐:
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
阅读排行:
· 手把手教你更优雅的享受 DeepSeek
· AI工具推荐:领先的开源 AI 代码助手——Continue
· 探秘Transformer系列之(2)---总体架构
· V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示