当前位置: 首页 > 知识库问答 >
问题:

我所有的@Autowired bean都是空的

戴鸿羽
2023-03-14

我不明白为什么我所有的bean在控制器中都是空的。我知道这是一个常见的问题,但我不是用new实例化对象。

控制器:

@Controller
@RequestMapping("/store")
public class MyController {

    @Autowired
    private MyService myService;

    @GetMapping("/getOptions")
    private String getOptions(HttpServletRequest request)
    {
        myService.doSomething(request);
        ....
    }
}

当我请求http://localhost/store/getOptions我在myService上收到一个NullPointerException。

我的服务

@Service
public class MyService
{
    ....
}

网络配置

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Bean
    BeanNameUrlHandlerMapping beanNameUrlHandlerMapping()
    {
        return new BeanNameUrlHandlerMapping();
    }
}

主要的

@SpringBootApplication
@Configuration
@ComponentScan(basePackages = { "com.mypackage.config", "com.mypackage.service", "com.mypackage.controller"})
public class MyApplication
{
    public static void main(String[] args)
    {
        if (AuthConfigFactory.getFactory() == null)
            AuthConfigFactory.setFactory(new AuthConfigFactoryImpl());
        SpringApplication.run(MyApplication.class, args);
    }
}

启动应用程序时,我可以在日志中看到myServicebean实际上正在自动连接到控制器:

- Processing injected element of bean 'myController': AutowiredFieldElement for private com.mypackage.service.MyService com.mypackage.controller.MyController.myService
- Returning cached instance of singleton bean 'MyService'
- Autowiring by type from bean name 'myController' to bean named 'myService'

所以我不明白为什么当我试图访问控制器中的myService时,它是空的。我不会在任何地方用new实例化控制器。

裁剪异常

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause:
java.lang.NullPointerException: null
at com.mypackage.controller.MyController.getOptions(MyController.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
....

编辑:

我已经删除了网页。xml来自我的项目,因为它是无关的。

共有2个答案

姚建树
2023-03-14

Spring java配置:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter{

    @Bean 
    BeanNameUrlHandlerMapping beanNameUrlHandlerMapping(){
        return new BeanNameUrlHandlerMapping();
    }
}

服务类别:

@Service("myService")
public class MyServiceImpl implements MyService{

    @Override
    public String getMessageinfo() {
        // TODO Auto-generated method stub
        return "Hello World!!";
    }
}

服务接口:

public interface MyService {
    public String getMessageinfo();
}

控制器类:

@RestController
@RequestMapping("/hello")
public class MyController {

    @Autowired
    private MyService myService;

    @GetMapping("/getMessage")
    //@ResponseBody
    private String getMessage(HttpServletRequest req){
        System.out.println("inside controller : - "+myService.getMessageinfo());
        return myService.getMessageinfo();
    }
}

SpringbootMain

@SpringBootApplication
@Configuration
@ComponentScan(basePackages={"com.example.demo.config","com.example.demo.controller","com.example.demo.service"})
public class Demo1Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo1Application.class, args);
    }
}

这对我有用。毫无例外,但我使用了EclipseSTIDE并创建了SpringBoot项目。http://localhost:8080/hello/getMessage

梁丘洲
2023-03-14

我的问题是控制器中的一些方法被注释为@Transactional。我没有在我的原始帖子中提供足够的信息让任何人都明白这一点。我在这里找到了答案:为什么我们不应该在@Transactional上制作一个SpringMVC控制器?

 类似资料:
  • 问题内容: 如何运行选择所有非null的MySQL查询?就像 我只需要删除所有内容即可吗? 问题答案: 您必须在每列上明确说明条件,例如

  • 我正在尝试登录数据库。我有一个带有属性url、用户名和密码的bean;带有登录参数的html页面(带有url的组合框,以及用户名和密码的输入文本字段);和一个jsp来处理请求。当我运行jsp时,bean中的所有属性都保持为空。我已经通过调试器运行了它,我可以看到它们都是空的。 以下是相关的HTML: 以下是我的观点: 和JSP: 在尝试初始化B()时,我不明白为什么我的所有属性都为null。编辑:

  • 问题内容: 我如何找出哪个目录负责修剪所有索引节点? 最终,根目录将负责最多数量的inode,因此我不确定到底要什么样的答案。 基本上,我的可用索引节点用完了,需要查找不需要的目录来进行剔除。 谢谢,对于模糊的问题,我们深表歉意。 问题答案: 因此,基本上,您正在寻找哪个目录中包含很多文件?这是第一个刺伤: 其中“ count_files”是一个shell脚本(感谢乔纳森)

  • 所以,在JavaFX上切齿,到目前为止一切进展顺利。 然而,所有文本字段都有一条横跨它们的线,从顶部算起大约10px。 不仅在我的应用程序中,在SceneBuilder应用程序中也是如此。 注意,我没有使用任何明确的CSS,我不知道SceneBuilder使用什么。屏幕截图来自SceneBuilder,我的屏幕看起来一样。 所以,这是基本的东西。 在Mac OS 10.9.5上 只是好奇是否还有人

  • 我试图获得一个关于Spring代理如何工作的高级视图。为什么我应该在我的应用程序中使用“API接口&Impl bean”模式或者只使用“bean类”模式。我读了不少这样的答案,但它们都很古老,我相信大多数与Java7和Spring3.x相关。我想知道在2020年,Java11+与Spring5.x(Spring Boot2.x)仍然有什么关系。是否有“最佳做法”可循? 此外,由于的可用性,如果我有

  • 如果所有div都设置了display none,我想显示类似“找不到结果”的消息