这个是我的UserDaoImpl:
注:Repository所在的包为:import org.springframework.stereotype.Repository;
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Resource(name="template")
private HibernateTemplate template;
} 这个是我的UserServiceImpl:
@Repository("userService")
public class UserServiceImpl implements UserService {
@Resource(name="userDao")
private UserDao userDao;
}
这个是我的Action:
import javax.annotation.Resource;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.jxlg.sence.domain.User;
import org.jxlg.sence.exception.BlogException;
import org.jxlg.sence.service.UserService;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;@Controller @Scope("prototype")
@Action(value="userLogin",results={
@Result(name="success",location="success.jsp",type="redirect"),
@Result(name="failed",location="login.jsp",type="redirect")
})
public class LoginAction extends BlogAction{
private static final long serialVersionUID = 1L;
private User user;
@Resource(name="userService")
private UserService userService;
public String login()throws Exception{
System.out.println(userService);
boolean flag = userService.login(user);
if(flag){
return "success";
}
return "failed";
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
异常为:
java.lang.NullPointerException
org.jxlg.sence.action.LoginAction.login(LoginAction.java:34)
就是红色的那行:userService为空,为什么没有注入,那里错了,第一次使用标注,请大侠教教
注:Repository所在的包为:import org.springframework.stereotype.Repository;
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Resource(name="template")
private HibernateTemplate template;
} 这个是我的UserServiceImpl:
@Repository("userService")
public class UserServiceImpl implements UserService {
@Resource(name="userDao")
private UserDao userDao;
}
这个是我的Action:
import javax.annotation.Resource;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.jxlg.sence.domain.User;
import org.jxlg.sence.exception.BlogException;
import org.jxlg.sence.service.UserService;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;@Controller @Scope("prototype")
@Action(value="userLogin",results={
@Result(name="success",location="success.jsp",type="redirect"),
@Result(name="failed",location="login.jsp",type="redirect")
})
public class LoginAction extends BlogAction{
private static final long serialVersionUID = 1L;
private User user;
@Resource(name="userService")
private UserService userService;
public String login()throws Exception{
System.out.println(userService);
boolean flag = userService.login(user);
if(flag){
return "success";
}
return "failed";
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
异常为:
java.lang.NullPointerException
org.jxlg.sence.action.LoginAction.login(LoginAction.java:34)
就是红色的那行:userService为空,为什么没有注入,那里错了,第一次使用标注,请大侠教教
这个是我的UserServiceImpl:
import javax.annotation.Resource;import org.jxlg.sence.dao.UserDao;
import org.jxlg.sence.domain.User;
import org.jxlg.sence.exception.BlogException;
import org.jxlg.sence.service.UserService;
import org.springframework.stereotype.Repository;@Repository("userService")
public class UserServiceImpl implements UserService {
@Resource(name="userDao")
private UserDao userDao;
public User findById(int id) throws BlogException {
return userDao.findById(id);
}
public void save(User user) throws BlogException {
userDao.save(user);
} public void update(User user) throws BlogException {
userDao.upDate(user);
}
public boolean login(User user) throws BlogException {
System.out.println("userDao:"+userDao);
User u = userDao.findByName(user.getUname());
if(u!=null&&user.getPword().equals(u.getPword())){
return true;
}
return false;
}}
还有,没有set方法。
@Repository("userService"): 这个没有用过,不知道什么意思。
是否是替代set方法呢?
只知道action中的userService为空。
先加个set方法,然后看下applicationContext.xml里面有没有注入
action注入时,注意是使用name 而不是ID。
注解多了是头疼, 我见过人家的写的实体类 JSR303验证注解加上JPA的。 看上去灰茫茫一大片, 很酷的。
呵呵
我记得好像是用@component,没用过@Repository
这个错了
应用@component
我已经搞定了
使用注解需要在配置文件里面配置启动注解扫描具体为:
<context:annotation-config/>
<context:component-scan base package="org.jxlg.sence.dao.impl,org.jxlg.sence.service.impl"/>
呵呵,你没有开启注解,和引入命名空间。 注解我也觉得挺方便的,整个项目下来,XML非常简洁,干净。seter方法都不需要了。