SSH整合知识点

好长时间没用java了,现在再看ssh ,有点陌生。这里将ssh整合的知识点列出来,提醒自己。

1.实体类上的注解。 hibernate的注解。

@Entity 注解将一个类声明为实体 Bean ;@Table 为实体Bean指定对应数据库表中的名字;@Id 注解可将实体Bean中某个属性定义为主键;使用@GenerateValue注解可以定义该标识符的生成策略。 

@Entity
@Table(name="t_user")
public class User {
    private  int id;
    private  String name;
    private  String password;
    private  String  email;
        
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
.......
)

2.action类上的注解。spring的注解。

@@Component注解 (不推荐使用),类上加上一个@Component注解,就将该类定义为一个Bean了。Spring还提供了更加细化的注解形式:@Repository、@Service、@Controller,它们分别对应存储层Bean,业务层Bean,和展示层Bean。目前版本(2.5)中,这些注解与@Component的语义是一样的,完全通用,在Spring以后的版本中可能会给它们追加更多的语义。我们推荐使用@Repository、@Service、@Controller来替代@Component。 

spring 共有4种“组件”式注解
@Component:可装载组件
@Repository:持久层组件
@Service:服务层组件
@Controller:控制层组件

@Scope("prototype")  struts的action拖给spring管了,写上这样一句后,每次请求都会重新创建一个action。

@Resource(这个注解属于J2EE的),默认安装名称进行装配,不用重新new对象。名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。

@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。

把service的接口(注意不要是service的实现类)注入到action中。这里的name名称是 Class  UserServicesImpl 中定义的组件名称。

@Component("login")
@Scope("prototype")
public class LoginAction extends ActionSupport implements ModelDriven{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private UserRegisterInfo info = new UserRegisterInfo();
    private UserService us;
    
    public UserService getUs(){
        return us;
    }
    @Resource(name="userService")
    public void setUs(UserService us) {
        this.us = us;
    }
    
    
    @Override
    public String execute() throws Exception {
        User user=new User();
        user.setName(info.getName());
        user.setPassword(info.getPassword());
        HttpServletRequest request = ServletActionContext.getRequest();    
    
        if (us.validate(user)){
            request.setAttribute("name", info.getName());
            System.out.println(request.getAttribute("name"));
            System.out.println("login success");
            return   "success";
        }
        else {
            request.setAttribute("name", info.getName());
            System.out.println(us.validate(user)+"--");
            request.setAttribute("name", null);
            return  "error";
        }
    }

下面的代码是利用@Resource将userdao装配到UserServiceImpl这个类中,然后就可以里就可以利用 userdao了。这里的名称就是userdao。在类UserDaoImpl中定义的组件名称为 @Component("userdao"),正好相同,所以这里面的@Resource后面可以不加名称。

@Component("userService")
public class UserServiceImpl implements UserService {

private UserDao userdao; 
    
    public UserDao getUserdao() {
        return userdao;
    }
   @Resource
    public void setUserdao(UserDao userdao) {
        this.userdao = userdao;
    }        
    public  void  add(User user) throws Exception{
        userdao.save(user);
    }
    public  boolean exits(User user) throws Exception{
        return userdao.exits(user.getName());
    }
    public boolean validate(User user) throws Exception {
        return userdao.validate(user);
    }        
}

 

 

posted @ 2013-07-14 21:23  红场小烟  阅读(267)  评论(0编辑  收藏  举报