听到一句歌词,世界很大,我很渺小。
不知道在另外一个平行时空的我是否怀揣着梦想目标,在努力呢?
希望她在最好的年纪,做最棒的事情。
====================================================
Spring注解@Component、@Repository、@Service、@Controller区别
如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释,而用 @Component 对那些比较中立的类进行注释。 在一个稍大的项目中,通常会有上百个组件,如果这些组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。 Spring2.5为我们引入了组件自动扫描机制,他可以在类路径底下寻找标注了@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进Spring容器中管理。它的作用和在xml文件中使用bean节点配置组件时一样的。
注入方式:
把DAO实现类注入到service实现类中,把service的接口(注意不要service的实现类)注入到Controller(Action)中,注入时不要new 这个注入的类,因为spring会自动注入,如果手动再new的话会出现错误,然后属性加上 @Autowired后不需要getter()和setter()方法,Spring也会自动注入。
即:从DAO(Repository) -> Service -> Controller(Action)
@Service服务层组件,用于标注业务层组件,表示定义一个bean,自动根据bean的类名实例化一个首写字母为小写的bean,
例如Chinese实例化为chinese,如果需要自己改名字则:@Service("你自己改的bean名")。
@Controller用于标注控制层组件(如struts中的action)
@Repository持久层组件,用于标注数据访问组件,即DAO组件
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
在接口前面标上@Autowired和@Qualifier注释使得接口可以被容器注入,当接口存在两个实现类的时候必须指定其中一个来注入,使用实现类首字母小写的字符串来注入,如:
@Autowired
@Qualifier("chinese")
private Man man;
@PathVariable
通过 @Pathvariable注解绑定它传过来的值到方法的参数上。
@RequestMapping("/pathV/{pathv}")
//表示返回JSON格式的结果,如果前面使用的是@RestController可以不用写
@ResponseBody
public String getPath(@PathVariable String pathv) {
return "Hell PathVariable " + pathv;
}
//正则匹配
@RequestMapping("/pathVReg/{regexp:[a-z]{1,2}[0-9]{3,4}}")
//表示返回JSON格式的结果,如果前面使用的是@RestController可以不用写
@ResponseBody
@PathVariable("path")
public String getRegexPath(@PathVariable("regexp") String pathReg) {
return "Hello PathVariable " + pathReg;
}
需要注意的是,如果String pathv这里声明的变量名字跟{pathv}不一致,需要采取下面的方式,即@PathVariable("xxxxname")设定name。
@RequestMapping("/pathV/{pathv}")
//表示返回JSON格式的结果,如果前面使用的是@RestController可以不用写
@ResponseBody
public String getPath(@PathVariable("pathv") String path) {
return "Hell PathVariable " + path;
}
============================================================
2017年8月30日更新@RequestParam
如果有一个url是这样的:http://localhost:8080/AssetOnboard/upLoadUserInfo?user_id=44&user_name=steven&user_score=10.0,你可以用@RequestParam在controller里来绑定参数(例如:user_id)到另外的参数( userId )名称上,这样就可以随意书写参数名称了,不然就要保证request里面的参数名字和方法一致(例如:user_score)
@RequestMapping("/upLoadUserInfo")
//表示返回JSON格式的结果,如果前面使用的是@RestController可以不用写
@ResponseBody
public String upLoadInfo2UserInfo(@RequestParam("user_id") Integer userId, @RequestParam("user_name") String username, float user_score) {
UserInfo userInfo = new UserInfo();
userInfo.setId(userId);
userInfo.setName(username);
userInfo.setScore(user_score);
userService.insertUser(userInfo);
return "Insert Successfully";
}
网友评论