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 ...
随机推荐
- 【canvas】N角光阑
这回把光阑代码统一了,修改angleCount的数目为3就是三角光阑,angleCount的数目为4就是四角光阑,angleCount的数目为6就是六角光阑,目前代码中是12角光阑. 图示: 代码: ...
- Discuz常见小问题-无法登陆UCenter怎么办
打开uc_server/model/admin.php找到第22行的$this->cookie_status = 0;改成$this->cookie_status = isset($_CO ...
- 翻译记忆软件-塔多思TRADO经典教程_2
Trados 中文简明教程Trados 中文简明教程1. 准备工作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
- Android 视频缩放/放大
1. 原理 不直接改变Codec输出的视频宽高比,而是改变视频播放器窗体的大小. 2. 设置Window 须要将Window设置未能够超出屏幕尺寸 mWindow.setFlags(WindowMan ...
- ArcGIS中的查询
最近身体不适,静下心来看了一下以前收集的电子书.下面是<ArcGIS地理信息系统教程_第5版>(李玉龙)第5章“查询”的读书笔记. 1.查询的常见应用: 选择感兴趣的要素:查找哪些要素满足 ...
- ZH奶酪:Ubuntu客户端通过SSH方式远程登录Ubuntu服务器
1.概述 传统的远程登录(telnet,rlogin)时不安全的,他们在网络上用明文传输口令和数据,SSH则是安全的,openssh提供两种级别的验证方式. (1)基于口令的安全验证:知道服务器的帐号 ...
- 知识共享图文直播---(一)将数据库中的数据加载到MSFlexGrid空间中再导入Excel
熟话说万物皆有其存在的道理,为什么我突然想写<知识共享图文直播>这个系列呢?首先,我想的是记录自己学习的历程,在记录中加深自己对知识的理解,同时也希望自己的博文能帮助到其他数据库的初学者. ...
- Hibernate(十三)命名查询-批量处理和调用存储过程
一.命名查询 HQL语句混杂在代码之间将破坏代码的可读性 Hibernate允许在映射配置文件中定义字符串形式的查询语句,这种查询方式称为命名查询 二.建立数据表和持久化类 建立数据表 create ...
- interllij idea13 clone及push工程到github上
转自:http://my.oschina.net/okchen/blog/337556 为什么用Intelli J idea 而不是Eclipse?因为我早已无法忍受Eclipse的慢了,搞不好还会奔 ...
- [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析
转自:http://blog.csdn.net/pleasecallmewhy/article/details/8934726 百度贴吧的爬虫制作和糗百的爬虫制作原理基本相同,都是通过查看源码扣出关键 ...