常见的注解

一、注解的作用:

spring容器是通过把java类注册成bean进行管理的,把java类变成bean有两种方式:

一种是通过xml文件进行配置,把需要的类注册成bean;

还有一种方式就是注解,注解的方式只需要在需要的类前边加上注解。

spring扫描到注解就能把被注解的类自动注册成bean,不同的注解可以被注册成不同的bean,相对于xml配置,使用注解更为方便快捷。也因此越来越多的框架都支持注解配置而放弃xml配置。所以总得来说,注解的作用就是代替手动配置吧,只需要在适当的位置标注一下,就能让框架自己完成具体的配置过程。

 二、常见注解

(一)组件类注解

@Component :标准一个普通的spring Bean类。 
@Repository:标注一个DAO组件类。 
@Service:标注一个业务逻辑组件类。 
@Controller:标注一个控制器组件类。 

这些都是注解在平时的开发过程中出镜率极高,@Component、@Repository、@Service、@Controller实质上属于同一类注解,用法相同,功能相同,区别在于标识组件的类型。
@Component可以代替@Repository、@Service、@Controller,因为这三个注解是被@Component标注的

@ Controller注解

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
    String value() default "";
}

注意:尽量使用对应组件注解的类替换@Component注解,在spring未来的版本中,@Controller@Service,@Repository会携带更多语义。并且便于开发和维护

(二)装配bean时常用的注解

@PostConstruct 和 @PreDestroy 注解可以指定多个初始化 / 销毁方法,那些被标注 @PostConstruct 或 @PreDestroy 注释的方法都会在初始化 / 销毁时被执行。

@Resource的作用相当于@Autowired,均可标注在字段或属性的setter方法上
不同点:
1.@Autowired是Spring的注解,@Resource是javax.annotation注解,而是来自于JSR-250,J2EE提供,需要JDK1.6及以上。
2.@Autowired注解默认按照类型装配,如果容器中包含多个同一类型的Bean,那么启动容器时会报找不到指定类型bean的异常,解决办法是结合**@Qualifier**注解进行限定,指定注入的bean名称。
3.@Resource有两个中重要的属性:name和type。@Resource如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配

(三)其他常用注解

1.@RequestMapping():为控制器类或者方法指定一个映射的路径,也就是说控制器类或者方法所对应的url,之后就可以通过@RequestMapping()注解指定的路径来访问到对应的类或方法

@RequestMapping中可以使用 method 属性标记其所接受的方法类型,如果不指定方法类型的话,可以使用 HTTP GET/POST 方法请求数据,但是一旦指定方法类型,就只能使用该类型获取数据。

@GetMapping

@PostMapping

此外,@RequestMapping还支持带占位符的URL,当userid有值得时候生成完整的URL。Userid的值通过@PathVariable 注解方法进行绑定:

  • @PathVariable : 该注解用于方法修饰方法参数,会将修饰的方法参数变为可供使用的uri变量(可用于动态绑定)。
@RequestMapping(value=”/{userid}”)
Public void login(@PathVariable String userid,Model model){}

2.@RequestParam: 将请求中带的参数绑定到被注解标注的参数上去

Public void login(@RequestParam(value=”username” required=”true”) String username){

}

表示:把请求带过来的参数username赋值给方法中username这个参数。Required代表参数是否必须,可以不写,默认为true,当不能确定请求中存在value的值得这个参数的时候,就必须把设置required的值为false。

3.@RequestBody : @RequestBody是指方法参数应该被绑定到HTTP请求Body上。

@RequestMapping(value = "/something", method = RequestMethod.PUT)
public void handle(@RequestBody String body,@RequestBody User user){
   //可以绑定自定义的对象类型
}

4.@ResponseBody : @ResponseBody与@RequestBody类似,它的作用是将返回类型直接输入到HTTP response body中。
        @ResponseBody在输出JSON格式的数据时,会经常用到。

@RequestMapping(value = "/happy", method =RequestMethod.POST)
@ResponseBody
public String helloWorld() {    
    return "Hello World";//返回String类型
}

5.@RestController :控制器实现了REST的API,只为服务于JSON,XML或其它自定义的类型内容,@RestController用来创建REST类型的控制器,与@Controller类型。@RestController就是这样一种类型,它避免了你重复的写@RequestMapping与@ResponseBody。

6.@Transational:  spring事务管理的注解,被注解的方法或类就自动被注册成事务接收spring容器的管理

转载于:https://my.oschina.net/u/4116631/blog/3060114

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值