spring注解-service利用注解注入,会空指针异常。而用getBean方式则可以获取到service。

问题描述

service利用注解注入,会空指针异常。而用getBean方式则可以获取到service。
spring配置文件如下:

<?xml version=""1.0"" encoding=""UTF-8""?>
xmlns:context=""http://www.springframework.org/schema/context""
xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
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.xsd"">

<bean id=""placeholderProperties""    class=""org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"">    <property name=""locations"">        <list>            <value>classpath:conf/config.properties</value>        </list>    </property>    <property name=""fileEncoding"" value=""utf-8"" /></bean><import resource=""spring-hibernate.xml"" /><!-- Import basic SpringMVC Resteasy integration -->  <import resource=""classpath:springmvc-resteasy.xml"" /><!-- 扫描文件 --><context:component-scan base-package=""com.sinopec.carlife"" />

service接口如下:

package com.sinopec.carlife.service.api;

import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.sinopec.carlife.model.Region;

@Path(""/regions"")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public interface RegionService {

/** * 获取所有城市 * @return * @throws Exception */@POST@Path(""/all"")public List<Region> findRegions() throws Exception;

}

service实现类如下:

package com.sinopec.carlife.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.sinopec.carlife.dao.RegionDAO;
import com.sinopec.carlife.model.Region;
import com.sinopec.carlife.service.api.RegionService;

@Service(""regionService"")
public class RegionServiceImpl implements RegionService {

@Autowiredprivate RegionDAO regionDAO;@Overridepublic List<Region> findRegions() throws Exception {    return regionDAO.findRegions();}

}

junit测试如下:

package test.com.sinopec.carlife;

import java.util.List;

import javax.annotation.Resource;

import junit.framework.TestCase;

import org.junit.Test;

import com.sinopec.carlife.model.Region;
import com.sinopec.carlife.service.api.RegionService;

public class RegionServiceTest extends TestCase {

@Resource(name=""regionService"")private RegionService regionService;@Testpublic void testFindRegions() {    try {        /*ApplicationContext context = new ClassPathXmlApplicationContext(""classpath:spring/spring.xml"");        regionService = (RegionService) context.getBean(""regionService"");*/        List<Region> regions = regionService.findRegions();        System.out.println(regions.size());    } catch (Exception e) {        e.printStackTrace();    }}

}

解决方案

因为你的注解是spring容器解析的,要想让注解能够生效的话是需要spring容器启动的,这就是web项目启动环境下使用的。
你在junit里面测试,要想让Spring容器管理bean完成自动注入的话,可以使用Spring的junit测试工具注解。试试使用如下代码:

 import java.util.List;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.test.context.transaction.TransactionConfiguration;import javax.annotation.Resource;import junit.framework.TestCase;import com.sinopec.carlife.model.Region;import com.sinopec.carlife.service.api.RegionService;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations ={""classpath:spring/spring.xml""})@Transactionalpublic class RegionServiceTest extends TestCase {@Resource(name=""regionService"")private RegionService regionService;@Testpublic void testFindRegions() {    try {        List<Region> regions = regionService.findRegions();        System.out.println(regions.size());    } catch (Exception e) {        e.printStackTrace();    }}

这样就能使用spring自动为junit单元测试自动注入依赖了。

解决方案二:
tomcat没启动,怎么加载配置?
用main方法测试,当然只能手动加载啦

时间: 2024-10-26 12:26:12

spring注解-service利用注解注入,会空指针异常。而用getBean方式则可以获取到service。的相关文章

基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式

在基于MVC4+EasyUI的Web开发框架里面,大量采用了Jquery的方法,对数据进行请求或者提交,方便页面和服务器后端进行数据的交互处理.本文主要介绍利用Jquery处理数据交互的几种方式,包括获取数据并显示,插入新数据到服务器,更新数据,删除数据等操作. 1.利用Jquery获取数据并显示 为了顺利获取数据,我们需要保持页面端调用和服务器端保持一致,并相应的把数据转换或者封装为对象实体进行处理. 下面我们以一个简单的全国省份.全国城市.全国城市行政区的案例进行Demo代码的介绍.    

注解失败-Spring整合Mybatis关于Dao注入失败的问题求解

问题描述 Spring整合Mybatis关于Dao注入失败的问题求解 抛出异常 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adminService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreat

详解Java的Spring框架中的注解的用法_java

1. 使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的 类的实现: class UserManagerImpl implements UserManager { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } ... } 配置文件: <bean id="userManagerImpl" class="com.

【shiro】spring整合shiro,注解控制shiro用户/角色/权限And/OR,没有权限跳转到固定页面

这几天粗浅的把shiro整合到spring中,并且注解控制shiro用户/角色/权限And/OR 步骤: 1.首先maven搭建web项目 2.创建数据库 user/role/authority 其中,role->user是一对多,role->authority是多对多 shiros.sql内容: 1 /* 2 SQLyog Ultimate v11.24 (32 bit) 3 MySQL - 5.5.41 : Database - shiros 4 *********************

使用Spring 2.5基于注解驱动的Spring MVC

概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 XML 配置文件中定义请求和 Controller 的映射关系,仅仅使用注解就可以让一个 POJO 具有 Controller 的绝大部分功能 -- Spring MVC 框架的易用性得到了进一步的增强.在框架灵活性.易用性和扩展性上,Spring MVC 已经全面超越了其它的 MVC 框架,伴随

Spring与Mybatis基于注解整合Redis的方法_java

基于这段时间折腾redis遇到了各种问题,想着整理一下.本文主要介绍基于Spring+Mybatis以注解的形式整合Redis.废话少说,进入正题. 首先准备Redis,我下的是Windows版,下载后直接启动redis-server就行了,见下图: 一,先上jar包 二,创建实体类 package com.sl.user.vo; import java.io.Serializable; import com.fasterxml.jackson.databind.PropertyNamingSt

【Spring】Spring高级话题-组合注解与元注解

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 进行本示例的演示,需要先配置好Maven和Spring哦. 见: [Spring]基于IntelliJ IDEA搭建Maven 分析 所谓的元注解: 其实就是可以注解到别的注解上的注解. 而被注解的注解我们就称之为组合注解.(仔细理解,可能有点绕) 组合注解同时具备元注解的功能! Spring的很多注解都可以作为元注解,而且Spring本身已经有很多组合注解. 组合注解的好处: 简

spring开发,基于注解和基于配置,都有什么优缺点

问题描述 1.spring开发,基于注解和基于配置,都有什么优缺点?2.现在哪有spring3 mvc例子,要基于xml配置文件的,官方包也没有例子,网上好多都代码不全,运行不了,我想学一下,谁手上有请帮忙Email:aaron3323@163.com 解决方案 呵呵 我公司的项目在用Spring 注释配置我也在学习 你看看这篇文章吧.还不错.http://www.ibm.com/developerworks/cn/java/j-lo-spring25-ioc/

【Spring】Spring高级话题-@Enable***注解的工作原理

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] @EnableAspectJAutoProxy @EnableAspectJAutoProxy注解 激活Aspect自动代理 <aop:aspectj-autoproxy/> 开启对AspectJ自动代理的支持. 在用到AOP的自动代理的时候用,如果你理解了Java的动态代理,很容易的就会熟悉AOP的自动代理的. @EnableAsync @EnableAsync注解开启异步方法