欢迎访问优讯网!
您当前的位置:首页 > 爱编程

解决Springboot @Autowired 无法注入问题

时间:2020-04-27 08:58:13  来源:优讯网  作者:小卡司  浏览次数:
WebappApplication 一定要在包的最外层,否则Spring无法对所有的类进行托管,会造成@Autowired 无法注入。接下来给大家介绍解决Springboot @Autowired 无法注入问题,感兴趣的朋友一起看看吧
 

特别提醒:一定要注意文件结构

  WebappApplication 一定要在包的最外层,否则Spring无法对所有的类进行托管,会造成@Autowired 无法注入。

1.  添加工具类获取在 Spring 中托管的 Bean

  (1)工具类

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.common;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
 * @program: IPC_1P
 * @description: 获取在spring中托管的bean
 * @author: johnny
 * @create: 2018-08-03 16:24
 **/
public class SpringContextUtil {
  private static ApplicationContext applicationContext; // Spring应用上下文
  // 下面的这个方法上加了@Override注解,原因是继承ApplicationContextAware
接口是必须实现的方法

  public static void setApplicationContext(ApplicationContext applicationContext)
      throws BeansException {
    SpringContextUtil.applicationContext = applicationContext;
  }
  public static ApplicationContext getApplicationContext() {
    return applicationContext;
  }
  public static Object getBean(String name) throws BeansException {
    return applicationContext.getBean(name);
  }
  public static Object getBean(String name, Class requiredType)
      throws BeansException {
    return applicationContext.getBean(name, requiredType);
  }
  public static boolean containsBean(String name) {
    return applicationContext.containsBean(name);
  }
  public static boolean isSingleton(String name)
      throws NoSuchBeanDefinitionException {
    return applicationContext.isSingleton(name);
  }
  public static Class getType(String name)
      throws NoSuchBeanDefinitionException {
    return applicationContext.getType(name);
  }
  public static String[] getAliases(String name)
      throws NoSuchBeanDefinitionException {
    return applicationContext.getAliases(name);
  }
}

  (2)使用

    1)程序启动时,实例化 SpringContextUtil

1
2
3
4
5
6
7
8
9
10
@SpringBootApplication
public class WebappApplication {
  private static ApplicationContext applicationContext;
  public static void main(String[] args) {
    applicationContext = SpringApplication.run(WebappApplication.class, args);
    //
    SpringContextUtil springContextUtil = new SpringContextUtil();
    springContextUtil.setApplicationContext(applicationContext);
    System.out.println("服务器启动测试!");
}

    2)在使用 @Service 的方法中,通过@Autowired 注入,使用SpringcontexUtil 获取Bean上下文

1
2
3
4
5
6
7
8
9
10
@Autowired
  SenderService senderService;
public class Package_State {
  @Autowired
  SenderService senderService;
  @Component
  private Package_State() {
    senderService = (SenderService)SpringContextUtil.getBean("senderService");
  }
}

总结

以上所述是小编给大家介绍的解决Springboot @Autowired 无法注入问题,希望对大家有所帮助

来顶一下
返回首页
返回首页

原文链接:https://www.jb51.net/article/145206.htm


推荐资讯
如何下载旧版centos iso镜像 如何下载迷你mini版的centos镜像
如何下载旧版centos i
计算机的正确使用姿势 电脑痴如何正确的使用电脑
计算机的正确使用姿势
好用的后台管理的前端框架模版H-ui H-ui框架模版分享
好用的后台管理的前端
微信电脑多开方法 无需辅助电脑版微信双开方法分享
微信电脑多开方法 无
相关文章
栏目更新
栏目热门