Spring注解运行时抛出null
关于Spring的注解其实不难,大致需要以下几个流程:
一、配置Spring的注解支持
<?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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" 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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.ximesun.jee" />
<context:annotation-config /> </beans>
二、写对象时注解标识各种类,尽可能按照用途来区分
@Controller
public class HomeAction {...}
@Service
public class HomeService {...}
@Repository
6 public class User {...}
7 @Component
8 public class MenuDao extends DbUtilsTemplate {...}
三、注解的注入和引用
@Service
public class HomeService {
@Autowired
private MenuDao dao;
public List<Menu> getAllMenu(){
List<Menu> mlist = new ArrayList<Menu>();
mlist = dao.findAll();
return mlist;
}
OK,理论上这样就可以,然而很多时候会出现各种问题,例如我刚遇到这样一个抛出:
四、一个问题
java.lang.NullPointerException
at com.ximesun.jee.fsdiserver.HomeService.getAllMenu(HomeService.java:20)
at com.ximesun.jee.fsdiserver.FSdiserver.main(FSdiserver.java:23)
JAVA的童鞋熟悉的不能再熟悉了吧~我确认相关的对象定义是没问题的,那引用呢?找到问题了:
public static void main(String[] args) throws InterruptedException {
AbstractApplicationContext applicationContext = new FileSystemXmlApplicationContext(
"conf/context.xml");
List<Menu> mlist = new ArrayList<Menu>();
HomeService h = new HomeService();
mlist = h.getAllMenu();
applicationContext.registerShutdownHook();
}
问题就是这里new了HomeService,而new的类是不会根据注解自动引入的,那怎么办呢?
将上面的第五行代码修改为如下的方法初始化,问题就解决了。
HomeService h = applicationContext.getBean("homeService",HomeService.class);
用Spring的环境里初始化这个对象,就可以顺理成章的使用这个对象中的关于Spring的注解了。
五、关于带参数的构造器的类的@AutoWired
首先这个类一定要有不带参数的构造器,然后就是要为构造器相关的参数写set方法。
错误的用法如下:
@AutoWired
TcpClientSocketThread clientThread;
......
clientThread = new TcpClientSocketThread(id, clientSocket);
clientThread.start();
正确的用法如下:
@AutoWired
TcpClientSocketThread clientThread;
......
clientThread.setClientId(id);
clientThread.setClientSocket(clientSocket);
clientThread.start();
更多关于Spring注解的内容和应用,建议参考《Spring in action》。
Spring注解运行时抛出null的更多相关文章
- Android ADT插件更新后程序运行时抛出java.lang.VerifyError异常解决办法
当我把Eclipse中的 Android ADT插件从21.1.0更新到22.0.1之后,安装后运行程序抛出java.lang.VerifyError异常. 经过调查,终于找到了一个有效的解决办法: ...
- 浅析调用JSR303的validate方法, 验证失败时抛出ConstraintViolationException
废话不多说,直接进入正题:如何使用JSR303的validate,进行数据校验,失败后直接抛出异常加入流转信息中,并在form页面提示出来. 首先我们为了启用验证,需要向 项目中添加Bean验证的实现 ...
- JMS之——ActiveMQ时抛出的错误Could not connect to broker URL-使用线程池解决高并发连接
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/69046395 解决使用activemq时抛出的异常:javax.j ms.JMSE ...
- 【VS调试】C#读写Windows 7注册表时抛出“不允许所请求的注册表访问权”的解决办法
原文:[VS调试]C#读写Windows 7注册表时抛出"不允许所请求的注册表访问权"的解决办法 项目 - 属性 - 安全性,"使用ClickOnce",修改a ...
- AES加密时抛出java.security.InvalidKeyException: Illegal key size or def
原文:AES加密时抛出java.security.InvalidKeyException: Illegal key size or def 使用AES加密时,当密钥大于128时,代码会抛出 java. ...
- java异常处理:建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出NagativeFundsException,如new Bank(100),
建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount ...
- Spring注解浅入浅出——不吹牛逼不装逼
Spring注解浅入浅出——不吹牛逼不装逼 前情提要 上文书咱们说了<Spring浅入浅出>,对Spring的核心思想看过上篇的朋友应该已经掌握了,此篇用上篇铺垫,引入注解,继续深入学习. ...
- PHP 安装 扩展时 抛出 /usr/local/Cellar/php@7.1/7.1.25/pecl 异常解决
liugx@MacBook-Pro ~/work/php/ext_source/php-xhprof-extension master make installmkdir: /usr/ ...
- CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法
这些天重装了电脑Win10系统,安装了CAD2012和VS2012,准备进行软件开发.在调试程序的时候,CAD没有进入界面就抛出 “正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain ...
随机推荐
- 深入理解JSON
一.JS判断字符串是否为JSON的方法: function isJSON(str) { if (typeof str == 'string') { try { JSON.parse(str); ret ...
- JAVA 读取计算机中相关信息
java读取 计算机 cup号 读取版本号 显卡 .. . . ........ .. . . . package com.swt.common.util; import java.io.Buffer ...
- 有关String的转换的一篇好文章
Pay Close Attention - String Handling I need to make a detour for a few moments, and discuss how t ...
- linux ---jenkins的安装与配置
linux下的jenkins的安装: Jenkins 下载网址: http://jenkins-ci.org/ 1.准备:JDK环境,tomcat环境,maven环境,jenkins.war包 2.在 ...
- (剑指Offer)面试题60:把二叉树打印成多行
题目: 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 思路: 很明显,采用广度优先遍历来解决,但因为需要按行输出,所以需要判断每一层的开始和结束,因此需要两个变量,一个表示当前层尚 ...
- C#.NET常见问题(FAQ)-如何把函数名作为参数传递给另一个函数
在主窗体中使用的还是普通的函数,但是test函数有一个新的参数,就是method 这个method所指向的就是前面委托定义的method 更多教学视频和资料下载,欢迎关注以下信息: 我的优 ...
- Phpcms之L()函数
.phpcms\languages\zh-cn 中文语言包2.phpcms\languages\en 英文语言包 phpcms v9语言包建立 在phpcms v9二次开发之模型类的应用 ...
- IntelliJ IDEA 2017.2.2 的破解 有效期 2116年
破解三部曲 下载破解文件 JetbrainsCrack-2.6.6-release-enc.jar http://idea.lanyus.com/jar/JetbrainsCrack-2.6.6- ...
- UI复习练习_优酷布局
还记得前一周,细致看了一下我自己的代码,特意看了下代码规范,一个好的代码习惯就应该慢慢增加自己寻常练习中. 看看UI吧 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5 ...
- chardet 模块
#coding:utf-8 #指定本文件编码为utf-8 #python 27 #xiaodeng #chardet模块 #chardet模块下载地址: #1)http://pan.baidu.com ...