spring中set注入的一些小细节错误
这是小白偶尔一直null指针的错误,调试了好久,原来是自己对spring注入的不够了解
我相信有很多跟我差不多的初学者会遇上,所以特地写出来,防止有人跟我一样。哈哈,也写上去,以防自己下次还犯这样的错误。
一样,首先,举个反例
所有类

有个城市类

有个华北地区类,有个城市类的集合属性

同上,华南地区类

index.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<center>
<h1>欢迎光临</h1><p><p><p><p>
<form action="query" method="post">
<table border="0">
<tr>
<td>
<input type="radio" name="country" value="SC" checked> 华南旅游城市<br>
<input type="radio" name="country" value="NC"> 华北旅游城市 <br>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type = "submit" name = "submit" value = "查 询" />
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
最后有个servlet类
package com.servlet; import java.io.IOException;
import java.io.PrintWriter;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import com.javaBean.City;
import com.javaBean.NorthChina;
import com.javaBean.SouthChina; public class CountryServlet extends HttpServlet { private NorthChina northChina;
private SouthChina southChina; public NorthChina getNorthChina() {
return northChina;
} public void setNorthChina(NorthChina northChina) {
System.out.println("已经注入了,城市个数:"+northChina.getCitys().size());
this.northChina = northChina;
} public SouthChina getSouthChina() {
return southChina;
} public void setSouthChina(SouthChina southChina) {
this.southChina = southChina;
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String diqu=request.getParameter("country");
PrintWriter writer = response.getWriter();
List<City> citys=null;
if(diqu!=null){
if("SC".equals(diqu)){
citys=southChina.getCitys();
}else if("NC".equals(diqu)){
citys=northChina.getCitys();
}
}
String str="";
for (int i = 0; i < citys.size(); i++) {
str+=citys.get(i).getCity()+",";
}
writer.write(str);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doGet(request, response);
} }
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="shenzhen" class="com.javaBean.City">
<property name="city" value="深圳"></property>
</bean>
<bean id="hongkong" class="com.javaBean.City">
<property name="city" value="香港"></property>
</bean>
<bean id="guilin" class="com.javaBean.City">
<property name="city" value="桂林"></property>
</bean>
<bean id="guangzhou" class="com.javaBean.City">
<property name="city" value="广州"></property>
</bean>
<bean id="beijin" class="com.javaBean.City">
<property name="city" value="北京"></property>
</bean>
<bean id="tianjin" class="com.javaBean.City">
<property name="city" value="天津"></property>
</bean>
<bean id="shanghai" class="com.javaBean.City">
<property name="city" value="上海"></property>
</bean>
<bean id="haerbin" class="com.javaBean.City">
<property name="city" value="哈尔滨"></property>
</bean> <bean id="southChina" class="com.javaBean.SouthChina">
<property name="citys">
<list>
<ref bean="guilin"/>
<ref bean="shenzhen"/>
<ref bean="hongkong"/>
<ref bean="guangzhou"/>
</list>
</property>
</bean>
<bean id="northChina" class="com.javaBean.NorthChina">
<property name="citys">
<list>
<ref bean="shanghai"/>
<ref bean="haerbin"/>
<ref bean="beijin"/>
<ref bean="tianjin"/>
</list>
</property>
</bean>
<bean id="countryServlet" class="com.servlet.CountryServlet">
<property name="northChina" ref="northChina"></property>
<property name="southChina" ref="southChina"></property>
</bean> </beans>
web.xml配置是正确的,开始部署到tomcat


打开页面访问

点击查询,然而错误就来了


测试方法中执行时会发现

原因竟然是我误认为启动服务器时,已经把NorthChina注入进去了,所以就在servlet调用类中的方法,报出null,
结果我百度搜索“set注入”(其实都是很多demo,并没有仔细详解),然后我就发现注入NorthChina的是spring容器中的CountryServlet,
而现在调用的CountryServlet类并非是Spring构建的,可以理解为自己new了一个。所以就只能在这两个类中加个static,就可以获取了

这样,问题就解决了(相信大神应该还有跟多好的方法,方便的话可以在评论中教导小白)。小白只是把自己在学习中遇到的问题写出来,方便自己查看学习,也可以让大家防止遇到一样的错误,嘿嘿。
公众号
欢迎关注我的公众号“码上开发”,每天分享最新技术资讯、最优原创文章。关注获取最新资源

版权声明:本文为不会代码的小白原创文章,未经允许不得转载。
spring中set注入的一些小细节错误的更多相关文章
- Spring中依赖注入的四种方式
在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入 这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的sett ...
- spring中构造函数注入
spring中构造函数注入,简单来说,就是通过beans.xml中,设置对应的值.而且通过bean类中的构造函数进行注入这些值. 文件结构 watermark/2/text/aHR0cDovL2Jsb ...
- 使用IDEA详解Spring中依赖注入的类型(上)
使用IDEA详解Spring中依赖注入的类型(上) 在Spring中实现IoC容器的方法是依赖注入,依赖注入的作用是在使用Spring框架创建对象时动态地将其所依赖的对象(例如属性值)注入Bean组件 ...
- Spring中的注入方式 和使用的注解 详解
注解:http://www.cnblogs.com/liangxiaofeng/p/6390868.html 注入方式:http://www.cnblogs.com/java-class/p/4727 ...
- spring中依赖注入
理解依赖注入:参考https://blog.csdn.net/taijianyu/article/details/2338311 一.依赖注入让bean与bean之间以配置文件组织在一起,而不是以硬编 ...
- Spring中依赖注入的使用和配置
使用方法1: //在执行此实例化的时候就会完成所有注入 ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext( ...
- Java Spring 中你不知道的注入方式
前言 在Spring配置文件中使用XML文件进行配置,实际上是让Spring执行了相应的代码,例如: 使用<bean>元素,实际上是让Spring执行无参或有参构造器 使用<prop ...
- spring中依赖注入与aop讲解
一.依赖注入 这个属于IOC依赖注入,也叫控制反转,IOC是说类的实例由容器产生,而不是我们用new的方式创建实例,控制端发生了改变所以叫控制反转. 1 2 3 4 5 6 7 8 9 10 11 1 ...
- Spring中的注入方式
在Spring配置文件中使用XML文件进行配置,实际上是让Spring执行了相应的代码,例如: 使用<bean>元素,实际上是让Spring执行无参或有参构造器 使用<propert ...
随机推荐
- Python 学习 第三篇:数组类型(列表、字典和元组)
列表和字段都可以在原处进行修改,可以按照需求增长或缩短,并且可以包含任何类型的对象或被嵌套.列表和字典存储的是对象的引用,而不是拷贝. 一,列表 列表是有序的序列,每一个列表项的顺序是固定的,这使得列 ...
- SSIS 更新变量
在Package中声明一个variable,在package运行的过程中,SSIS如何update Variable? 第一种方法:使用 Script Task 来更新Variable的值 1,创建一 ...
- Gulp:插件编写入门
之前挖了个坑,准备写篇gulp插件编写入门的科普文,之后迟迟没有动笔,因为不知道该肿么讲清楚Stream这货,毕竟,gulp插件的实现不像grunt插件的实现那么直观. 好吧,于是决定单刀直入了.文中 ...
- Kubernetes并发控制与数据一致性的实现原理
在大型分布式系统中,定会存在大量并发写入的场景.在这种场景下如何进行更好的并发控制,即在多个任务同时存取数据时保证数据的一致性,成为分布式系统必须解决的问题.悲观并发控制和乐观并发控制是并发控制中采用 ...
- Beta阶段冲刺-4
一. 每日会议 1. 照片 2. 昨日完成工作 3. 今日完成工作 4. 工作中遇到的困难 杨晨露:热......算不算困难......? 戴志斌:找了好几种框架,改了不少 游舒婷:不能相信开发工具自 ...
- ElasticSearch 2 (7) - 基本概念
ElasticSearch 2 (7) - 基本概念 摘要 ElasticSearch的一些基本核心概念,理解这些概念有助于ElasticSearch的学习 准实时NRT(Near Realtime) ...
- 【壹拾壹周】final分数分配
组名: 新蜂 组长: 武志远 组员: 宫成荣 谢孝淼 杨柳 李峤 项目名称: java俄罗斯方块NEO 发布时间:12.3 git地址:https://git.coding.net/Boxer_/ho ...
- 【python】自学笔记
参考文献 1.环境安装 1.1 python 工作环境 2.7.14 1.2 pycharm community2018.1.1 4 x64 2.第一行代码 2.1 python交互模式, >& ...
- gitlab迁移
1.背景: 操作系统:CentOS Linux release (Core) gitlab版本: 使用rpm包地址:https://mirrors.tuna.tsinghua.edu.cn/gitla ...
- Luogu1641 SCOI2010生成字符串(组合数学)
NOI2018冒泡排序的一个子问题. #include<iostream> #include<cstdio> #include<cmath> #include< ...