最近在用Spring Roo開發一個小項目,表現層用到瞭spring webmvc,spring webmvc是完全基於註解的,感覺挺方便的。
Spring Roo是個好東西啊,用它開發CRUD操作全部自動生成,java web開發效率至少提高瞭3倍,有點ROR開發的感覺瞭,並且它是基於Spring,Hibernate等常用框架的,程序員和客戶都容易接受,呵呵。
1:spring ioc bean註解
在類上使用@Component註解,表示該類定義為Spring管理Bean,使用默認value(可選)屬性表示Bean標識符。
Java代碼
@Component("component")
public class TestCompoment {
@Autowired
private ApplicationContext ctx;
public ApplicationContext getCtx() {
return ctx;
}
}
同類型的還有@Service在業務層,@Controller在表現層,@Repository在dao層
Java代碼
@Service("testService") //括號中表示實例的名稱
public class TestServiceImpl {
@Autowired
@Qualifier("testHibernateDao") //@Qualifier 註釋指定註入 Bean 的名稱,這樣歧義就消除瞭
private TestHibernateDaoImpl dao;
public TestHibernateDaoImpl getDao() {
return dao;
}
}
@Autowired暴露的required屬性,這是承擔著依賴性檢查任務的重要屬性。默認時,凡是應用瞭@Autowired註解的屬性和方法都必須找到合適的協作者,否則DI容器會拋出異常,通過調整required屬性取值能夠改變這一行為@Autowired註解能夠作用於構建器、屬性、方法。這裡的方法不局限於設值方法,即setter方法,常見的各種方法都可以應用這一註解。
Java代碼
@Autowired(required=false) //required表示不對檢查
private TestBean2 testBean2;
@Autowired
private TestBean3 testBean3;
@Autowired註解的required屬性設置為false時,即使未找到合適的協作者,異常都始終不會被拋出。
2:spring mvc註解
Java代碼
@Controller//表現層註解生成對象
public class RestController {
public RestController(){
}
//映射註解路徑為/login 其中{user}表示參數,方式為get
@RequestMapping(value = "/login/{user}", method = RequestMethod.GET)
public ModelAndView myMethod(HttpServletRequest request, HttpServletResponse response,
@PathVariable("user") String user, ModelMap modelMap) throws Exception {
modelMap.put("loginuser", user);
return new ModelAndView("/login", modelMap);
}
@RequestMapping(value = "/welcome", method = RequestMethod.GET)
public String registPost() {
return "/welcome";
}
}
@PathVariable("user") String user是url中變量的獲取
區別::
Java代碼
@RequestMapping(value="/handle1")
public String handle1(@RequestParam("userName") String userName,
@RequestParam("password") String password,
@RequestParam("realName") String realName){
…
}
@RequestParam("userName")表示獲取表單等參數和getparamter一樣:
表單數據自動轉換對象的參數
所謂命令/表單對象並不需要實現任何接口,僅是一個擁有若幹屬性的POJO。Spring MVC按:“HTTP請求參數名 = 命令/表單對象的屬性名”
的規則,自動綁定請求數據,支持“級聯屬性名”,自動進行基本類型數據轉換
Java代碼
@RequestMapping(value = "/login")
public String handle14(User user) {
…
}
表單和User類之間的關系:輸入的
Java代碼
userName=xxx&password=yyy
—————-》
class User{
private String userName;
private String password;
}