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 ...
随机推荐
- scala 学习笔记十二 继承
1.介绍 继承是面向对象的概念,用于代码的可重用性.可以通过使用extends关键字来实现继承. 为了实现继承,一个类必须扩展到其他类,被扩展类称为超类或父类.扩展的类称为派生类或子类. Scala支 ...
- maven nexus linux私服搭建
搭建maven 下载jar包,将apache-maven-3.2.2-bin.tar.gz上传到server 1.解压 tar -zvxf apache-maven-3.2.2-bin.tar.gz ...
- 【MySQL】MySQL统计NULL字段处理
select A.user_id,ifnull(sum(ifnull(A.ex_cpu,0)),0) AS a0, ifnull(sum(ifnull(A.ex_mem,0)),0) AS a1, i ...
- 微信小程序app配置指南
//app.json页面 { //页面注册,有几个页面都要在pages里面注册 "pages":[ "pages/index/index", "pag ...
- Spring 在XML中声明切面/AOP
在Spring的AOP配置命名空间中,我们能够找到声明式切面选择.看以下: <aop:config> <!-- AOP定义開始 --> <aop:pointcut/> ...
- javascript获取数组种最大值?
Array.prototype.max = function () { return Math.max.apply({}, this) } Array.prototype.min = function ...
- BIO、NIO、AIO差别
网上非常多IO资料,对新手来说.越看越晕.依据自己的理解.总结对照了一下BIO.NIO.AIO. BIO:线程发起IO请求,无论内核是否准备好IO操作,从发起请求起,线程一直堵塞,直到操作完毕. 例如 ...
- 你的灯亮着吗pdf –读书笔记
十句话概括这本书 1.确认问题比找到方法更重要 2.解决问题其实解决的是"人的期待" 3.你在解决问题中可能会发现新的机会 4.要了解问题的可变性和复杂性 5.站在用户而不 ...
- HTML的GET方法传递参数样式。
#HTML的GET方法传递参数样式.http://127.0.0.1:8080/web1/urlinfo/getobject.html?UserId=1&UserName=ad
- MySQL 联合索引测试2
接上一篇文章: http://www.cnblogs.com/xiaoit/p/4430300.html 1:首先删掉上一篇建立的索引,重新建立一个. mysql> DROP INDEX idx ...