java - 带有组件扫描的简单 RestFul WebService
问题描述
我正在尝试在我的 restFul Webservice 中使用组件扫描自动装配一个对象。但是在使用userDao对象时会出现 Nullpointer 异常。
我不想使用 Spring MVC 或 spring boot。只想简单地使用组件扫描注入依赖项。请帮忙!!!
用户道.java
@Component
public class UserDao {
public List<User> getAllUsers(){
//return a list
}
}
用户服务.java
@Component
@Path("/UserService")
public class UserService {
@Autowired
private UserDao userDao;
@PostConstruct
public void initialize() {
System.out.println("userDao object: " + userDao);
}
@GET
@Path("/users")
@Produces(MediaType.APPLICATION_JSON)
public List<User> getUsers(){
return getUserDao().getAllUsers();
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
应用程序上下文.xml
<?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:aop = "http://www.springframework.org/schema/aop"
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
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
<context:annotation-config/>
<context:component-scan base-package="com.rest"/>
<aop:aspectj-autoproxy/>
</beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>User Management</display-name>
<servlet>
<servlet-name>Jersey RESTful Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.rest</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey RESTful Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
解决方案
您需要在 applicationContext.xml 文件中定义一个 bean。Spring 容器在应用程序启动时初始化此 bean。例如。
<bean id="userDAO" class="your.package.name.UserDAO">
<!-- In case if you use hibernate -->
<property name="sessionFactory" ref="sessionFactory" />
</bean>
打个比方,你可以把这想象成春天正在UserDAO userDAO = new UserDAO();
为你做的事情。
推荐阅读
- android - Flutter:文本搜索中的 Syncfusion_flutter_pdfviewer 为某些 pdf 提供了错误的结果
- reactjs - 对外部 API 的 HTTP 请求适用于 .NET,但不适用于 React(CORS 问题)
- javascript - 从 SQL 服务器中选择函数
- flutter - 由于呈现问题,横幅广告未显示在 Listview.separated 中
- sql - regexp_replace 可能是排序规则问题
- wordpress - 当存在 save_post 操作时,我无法更新我的页面是 functions.php
- sql - How to create sql table that changes dynamically the order of the columns based on current date/month?
- python - 外键相关,Django
- c# - 在 .net 中从 EPPlus 迁移到 NPOI
- dart - 如何在 Dart 对象中使用括号表示法?