好長時間沒用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); } }