首页 > 其他分享 >Spring注解运行时抛出null

Spring注解运行时抛出null

时间:2023-01-04 16:47:25浏览次数:36  
标签:Spring HomeService new clientThread null public 注解

关于Spring的注解其实不难,大致需要以下几个流程:

一、配置Spring的注解支持

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 4     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans 
 6         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
 7         http://www.springframework.org/schema/context 
 8         http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 9 
10     <context:component-scan base-package="com.ximesun.jee" />
11     <context:annotation-config />
12 
13 </beans>
复制代码

二、写对象时注解标识各种类,尽可能按照用途来区分

复制代码
1 @Controller
2 public class HomeAction {...}
3 @Service
4 public class HomeService {...}
5 @Repository
6 public class User {...}
7 @Component 8 public class MenuDao extends DbUtilsTemplate {...}
复制代码

三、注解的注入和引用

复制代码
 1 @Service
 2 public class HomeService {
 3     @Autowired
 4     private MenuDao dao;    
 6     public List<Menu> getAllMenu(){
 8         List<Menu> mlist = new ArrayList<Menu>();
 9         mlist = dao.findAll();
10         return mlist;
11 }
复制代码

OK,理论上这样就可以,然而很多时候会出现各种问题,例如我刚遇到这样一个抛出:

四、一个问题

1 java.lang.NullPointerException
2     at com.ximesun.jee.fsdiserver.HomeService.getAllMenu(HomeService.java:20)
3     at com.ximesun.jee.fsdiserver.FSdiserver.main(FSdiserver.java:23)

JAVA的童鞋熟悉的不能再熟悉了吧~我确认相关的对象定义是没问题的,那引用呢?找到问题了:

复制代码
1 public static void main(String[] args) throws InterruptedException {
2     AbstractApplicationContext applicationContext = new FileSystemXmlApplicationContext(
3             "conf/context.xml");        
4     List<Menu> mlist = new ArrayList<Menu>();
5     HomeService h = new HomeService();
6     mlist = h.getAllMenu();
7     applicationContext.registerShutdownHook(); 
8 }
复制代码

问题就是这里new了HomeService,而new的类是不会根据注解自动引入的,那怎么办呢?

将上面的第五行代码修改为如下的方法初始化,问题就解决了。

1 HomeService h = applicationContext.getBean("homeService",HomeService.class);

用Spring的环境里初始化这个对象,就可以顺理成章的使用这个对象中的关于Spring的注解了。

五、关于带参数的构造器的类的@AutoWired

首先这个类一定要有不带参数的构造器,然后就是要为构造器相关的参数写set方法。

错误的用法如下:

1 @AutoWired
2 TcpClientSocketThread clientThread;
3 ......
4 clientThread = new TcpClientSocketThread(id, clientSocket);
5 clientThread.start();

正确的用法如下:

1 @AutoWired
2 TcpClientSocketThread clientThread;
3 ......
4 clientThread.setClientId(id);
5 clientThread.setClientSocket(clientSocket);
6 clientThread.start();

 

更多关于Spring注解的内容和应用,建议参考《Spring in action》。

标签:Spring,HomeService,new,clientThread,null,public,注解
From: https://www.cnblogs.com/kn-zheng/p/17025293.html

相关文章

  • springboot 连接 mqtt,操作数据库时mqtt断开连接
    主要原因,程序异常导致连接断开第一种,普通类注入bean,为空。学过spring应该知道,这必然为空https://blog.csdn.net/qq_41249513/article/details/108465477https://blog.c......
  • Spring Boot整合Web项目常用功能详解
    这篇文章主要介绍了SpringBoot整合Web项目常用功能详解,在Web应用开发过程中,可以通过SpringBoot的Starter来将这些常用功能进行整合与集中维护,以达到开箱即用的目的。,需......
  • Spring Boot内置的一些工具类
    1、断言Assert工具类//要求参数object必须为非空(NotNull),否则抛出异常,不予放行//参数message参数用于定制异常信息。voidnotNull(Objectobject,Stringmessage......
  • Spring MVC无法获取ajax POST的参数和值
    一、怎么会这个样子很简单的一个想法,ajax以POST的方式提交一个表单,SpringMVC解析。然而一次次的打印null折磨了我整整一天……最后的解决现在看来是很明显的问题,“只是......
  • SpringBoot配置文件中spring
    SpringBoot配置文件中spring.profiles.active配置详解现象:在开发的时候测试和生产配置不一样每次加配置都需要更新生产原因:不方便解决:添加多套配置知识库:1、多环......
  • spring5框架
    概述:Spring是轻量级的开源的JavaEE框架Spring可以解决企业应用开发的复杂性Spring有两个核心部分:IOC和AOPIOC:控制反转,把创建对象过程交给Spring进行管理AOP:面向切面......
  • springboot 整合activiti
    importlombok.Data;importnet.sf.json.JSONObject;importjava.io.Serializable;importjava.util.Date;/***流程日志扩展类*@authorhxy*@emailhuangx......
  • STS(Spring Tool Suite)使用小技巧记录
    偶尔有些jar包无论如何都无法用maven下载,(例如我正在用的kaptcha)只好自己手动下载了以后再添加。这个时候记得修改以下地方。自动的VMware服务器无法启动,报错如下图解决办法,......
  • STS(Spring Tool Suite)使用前准备
    好了,卖了两个月冰激凌,现在又回来做程序员了。发现好多东西已经忘了。所以拿csdn当个记事本,方便我也方便其他和我有同样问题的人。现在打算用springmvc来做些东西,工具就用st......
  • java spring jar包下载
    想学习一下javaspring,真是不知道怎么来着手。在网上查了一下eclipse里建spring工程的方法:1、创建Java项目转到 文件菜单- 新建- 项目- Java项目。输入项目名称,例如......