Spring注解
1. 组件类注解
- @Component :标准一个普通的spring Bean类
- @Repository:标注一个数据访问层DAO组件类
- @Service:标注一个业务逻辑组件类
- @Controller:标注一个控制器(用于和前端交互)组件类
这些都是注解在平时的开发过程中出镜率极高,@Component、@Repository、@Service、@Controller实质上属于同一类注解,都在 org.springframework.stereotype 包下,用法相同,功能相同,区别在于标识组件的类型。@Component可以代替@Repository、@Service、@Controller,因为这三个注解是被@Component标注的。如下代码
1 | @Target({ElementType.TYPE}) |
2. 装配bean时常用的注解
- @Autowired:属于Spring 的org.springframework.beans.factory.annotation包下,可用于为类的属性、构造器、方法进行注值。默认情况下,其依赖的对象必须存在(Bean可用),如果要改变这种默认方式,可以设置其 required 属性为 false
- @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
1 | @Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, |
@Autowired 注解默认按照类型装配,如果容器中包含多个同一类型的Bean,那么启动容器时会报找不到指定类型bean的异常,解决办法是结合 @Qualifier 注解进行限定,指定注入的bean名称。
3. @Component vs @Configuration and @Bean
@Component可以替代 @Configuration注解,但是依旧有区别
1 | @Target({ElementType.TYPE}) |
Bean注解主要用于方法上,有点类似于工厂方法,当使用了@Bean注解,我们可以连续使用多种定义bean时用到的注解,譬如用@Qualifier注解定义工厂方法的名称,用@Scope注解定义该bean的作用域范围,譬如是singleton还是prototype等
Spring 中新的 Java 配置支持的核心就是@Configuration 注解的类。这些类主要包括 @Bean 注解的方法来为 Spring 的 IoC 容器管理的对象定义实例,配置和初始化逻辑。
使用@Configuration 来注解类表示类可以被 Spring 的 IoC 容器所使用,作为 bean 定义的资源。
1 | @Configuration |
4. web模块常用到的注解
@Controller :表明该类会作为与前端作交互的控制层组件,通过服务接口定义的提供访问应用程序的一种行为,解释用户的输入,将其转换成一个模型然后将试图呈献给用户。
@RequestMapping : 这个注解用于将url映射到整个处理类或者特定的处理请求的方法。可以只用通配符!
- 既可以作用在类级别,也可以作用在方法级别。当它定义在类级别时,标明该控制器处理所有的请求都被映射到 /xxx 路径下;定义在方法类型下,可以指定接收的方法类型,@RequestMapping(value=”/haha”,method=RequestMethod.GET)
@RequestParam :将请求的参数绑定到方法中的参数上,有required参数,默认情况下,required=true,也就是改参数必须要传。如果改参数可以传可不传,可以配置required=false
1
2
3
4
5
6public String sayHappy(
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "age", required = true) String age) {
//age参数必须传 ,name可传可不传
...
}@PathVariable : 该注解用于方法修饰方法参数,会将修饰的方法参数变为可供使用的uri变量(可用于动态绑定)。
1
2
3
4@RequestMapping(value="/happy/{dayid}",method=RequestMethod.GET)
public String findPet(@PathVariable String dayid, Model mode) {
//使用@PathVariable注解绑定 {dayid} 到String dayid
}@RequestBody : @RequestBody是指方法参数应该被绑定到HTTP请求Body上。
1
2
3
4@RequestMapping(value = "/something", method = RequestMethod.PUT)
public void handle(@RequestBody String body,@RequestBody User user){
//可以绑定自定义的对象类型
}@ResponseBody : @ResponseBody与@RequestBody类似,它的作用是将返回类型直接输入到HTTP response body中。@ResponseBody在输出JSON格式的数据时,会经常用到。
1
2
3
4
5@RequestMapping(value = "/happy", method =RequestMethod.POST)
@ResponseBody
public String helloWorld() {
return "Hello World";//返回String类型
}