SSH整合知識點

好長時間沒用java了,如今再看ssh ,有點陌生。這裏將ssh整合的知識點列出來,提醒本身。java

1.實體類上的註解。 hibernate的註解。spring

@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的註解。ssh

@@Component註解 (不推薦使用),類上加上一個@Component註解,就將該類定義爲一個Bean了。Spring還提供了更加細化的註解形式:@Repository、@Service、@Controller,它們分別對應存儲層Bean,業務層Bean,和展現層Bean。目前版本(2.5)中,這些註解與@Component的語義是同樣的,徹底通用,在Spring之後的版本中可能會給它們追加更多的語義。咱們推薦使用@Repository、@Service、@Controller來替代@Component。 ide

spring 共有4種「組件」式註解
@Component:可裝載組件
@Repository:持久層組件
@Service:服務層組件
@Controller:控制層組件 this

@Scope("prototype")  struts的action拖給spring管了,寫上這樣一句後,每次請求都會從新建立一個action。spa

@Resource(這個註解屬於J2EE的),默認安裝名稱進行裝配,不用從新new對象。名稱能夠經過name屬性進行指定,若是沒有指定name屬性,當註解寫在字段上時,默認取字段名進行安裝名稱查找,若是註解寫在setter方法上默認取屬性名進行裝配。hibernate

@Resource註解在字段上,這樣就不用寫setter方法了,而且這個註解是屬於J2EE的,減小了與spring的耦合。這樣代碼看起就比較優雅。prototype

把service的接口(注意不要是service的實現類)注入到action中。這裏的name名稱是 Class  UserServicesImpl 中定義的組件名稱。code

@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);
    }        
}
相關文章
相關標籤/搜索