常用注解
spring常用注解
@Component
是一个通用的Spring容器管理的单例bean组件,最普通的组件,可以被注入到spring容器进行管理。@Component是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能。
注解属性:
- value:给注入的bean命名(可省略)
@Service
作用于业务逻辑层(service层),底层还是 @Component
注解属性:
- value:给注入的bean命名(可省略)
@Repository
作用于持久层(dao层),它注解的类作为DAO对象(数据访问对象,Data Access Objects),这些类可以直接对数据库进行操作,底层还是 @Component
注解属性:
- value:给注入的bean命名(可省略)
@Controller
作用于表现层(spring-mvc的注解),它注解的类进行前端请求的处理,转发,重定向。包括调用Service层的方法。底层还是 @Component
注解属性:
- value:给注入的bean命名(可省略)
@RequestMapping
是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。该注解有六个属性:
- value:指定请求的实际地址,指定的地址可以是URI Template 模式
- method:指定请求的method类型, GET、POST、PUT、DELETE等;
- onsumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
- produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
- params:指定request中必须包含某些参数值是,才让该方法处理。
- headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
方法级别的注解
- @GetMapping:所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。
- @PostMapping:所扮演的是 @RequestMapping(method =RequestMethod.POST) 的一个快捷方式。
- @PutMapping:所扮演的是 @RequestMapping(method =RequestMethod.PUT) 的一个快捷方式。
- @DeleteMapping:所扮演的是 @RequestMapping(method =RequestMethod.DELETE) 的一个快捷方式。
@Autowired和@Resource的
@Resource:
是用来实现依赖注入的,此注解默认是byName
自动注入的
装配顺序:
(1)、@Resource
后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
(2)、指定了name或者type则根据指定的类型去匹配bean
(3)、指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错
@Autowired:
也是用来实现依赖注入的,但是此注解是byType
自动注入的
@Autowired
只有一个属性required,默认值为true,为true时,找不到就抛异常,为false时,找不到就赋值为null
@Qualifier
@Autowired
按类型查找,如果该类型的bean不唯一,则抛出异常;可通过组合注解@Qualifier
解决
@Autowired
@Qualifier("userService")
注意:Spring容器以name为key储存bean!这里的name可以指定,否则取首字母小写的类名。有相同的就报异常:BeanDefinitionStoreException!
两者区别
- Resource是JDK提供的,而Autowired是Spring提供的
- Resource不允许找不到bean的情况,而Autowired允许(@Autowired(required = false))
3· 指定name的方式不一样,@Resource(name = “baseDao”),@Autowired()和@Qualifier(“baseDao”)
4· Resource默认通过name查找,而Autowired默认通过type查找
@RequestBody
注解@RequestBody
接收的参数是来自requestBody中,即请求体。一般用于处理非Content-Type: application/x-www-form-urlencoded
编码格式的数据,比如:application/json、application/xml
等类型的数据。就application/json
类型的数据而言,使用注解@RequestBody
可以将body里面所有的json数据传到后端,后端再进行解析。
注意:
GET请求中不允许使用该注解。
@RequestParam
注解@RequestParam接收的参数是来自requestHeader中,即请求头。@RequestParam可以接受简单类型的属性,也可以接受对象类型。@RequestParam有三个配置参数如下:
- required 表示是否必须,默认为 true,必须。
- defaultValue 可设置请求参数的默认值。
- value 为接收url的参数名(相当于key值)。
@RequestParam
用来处理 Content-Type 为 application/x-www-form-urlencoded
编码的内容,Content-Type默认为该属性。
@PathVariable
作用:用于获取请求路径中的参数;例如:这样就获取到了id的值了
@RequestMapping(value="/queryNum/{id}")
publiv String getUser( @PathVariable("id") int id){
}
@ResponseBody
作用:该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
@RestController
相当于@ResponseBody + @Controller合在一起的作用。
AOP相关注解
Spring支持AspectJ的注解式切面编程。
-
@Aspect 声明一个切面(类上)
使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。 -
@After 在方法执行之后执行(方法上)
-
@Before 在方法执行之前执行(方法上)
-
@Around 在方法执行之前与之后执行(方法上)
-
@PointCut 声明切点
在java配置类中使用 @EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持(类上)
ComponentScan
自动扫描指定包下所有使用@Service、@Component、@Controller、@Repository
的类并注册。
@Scope
定义我们采用什么模式去创建Bean(方法上,得有@Bean) 其设置类型包括:
Singleton (单例,一个Spring容器中只有一个bean实例,默认模式), Prototype(每次调用新建一个bean), Request (web项目中,给每个http request新建一个bean), Session(web项目中,给每个http session新建一个bean), GlobalSession(给每一个 global http session新建一个Bean实例)。
@Configuration
声明当前类是一个配置类(相当于一个Spring配置的xml文件)(类上)。
@Bean
注解在方法上,声明当前方法的返回值为一个Bean。返回的Bean对应的类中可以定义init()方法和destroy()方法,然后在@Bean(initMethod=”init”,destroyMethod=”destroy”)定义,在构造之后执行init,在销毁之前执行destroy。(方法上)
@PostConstruct
标注在方法上,该方法在构造函数执行完成之后执行。
@PreDestory
标注在方法上,该方法在对象销毁之前执行。
@Value
经常与Sping EL表达式语言一起使用,注入普通字符,系统属性,表达式运算结果,其他Bean的属性,文件内容,网址请求内容,配置文件属性值等。
@Transactional
Spring事务注解
@Lazy
表示延迟初始化
@Async
在实际执行的bean方法使用该注解来申明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)
@Scheduled
来申明这是一个任务,包括cron,fixDelay,fixRate等类型。(方法上,需先开启计划任务的支持,需要@EnableScheduling开启定时任务)
@ControllerAdvice
这是一个增强的 Controller。使用这个 Controller ,可以实现三个方面的功能:
- 全局异常处理
- 全局数据绑定
- 全局数据预处理
@ExceptionHandler
用于全局处理控制器里的异常。配合@ControllerAdvice使用。
@ModelAttribute
本来的作用是绑定键值对到 Model 里,在 @ControllerAdvice 中是让全局的@RequestMapping都能获得在此处设置的键值对。
mybatis常用注解
@Param
当传入多个参数的时候我们可以通过以下方式获取值
public abstract User queryUserByThreeConditions(@Param("userId") Integer id, @Param("userName") String name, @Param("password") String pwd);
使用@param(“key”)注解,显示的指出键的值,在mapper.xml文件中通过键找值取出值即可,这样就可以很明显的表达出出入的参数的作用
@MapperScan
这个注解确实是Mybatis的注解,是为了集成Spring而写的注解。该注解主要是扫描某个包目录下的Mapper接口,将Mapper接口类交给Spring进行管理。
扫描包路径可以是一个或者多个,也可以在路径中可以使用 * 作为通配符对包名进行匹配 。
@Mapper
该注解是由Mybatis框架中定义的一个描述数据层接口的注解,注解往往起到的都是一个描述性作用,用于告诉Spring框架此接口的实现类由Mybatis负责创建,并将其实现类对象存储到spring容器中。
@Mapper接口是一个接口一个接口指定,@MapperScan可以直接指定一个包的路径。
总结:Mybatis的其他注解不经常使用,例如进行CRUD的注解,一般使用XML的方式进行使用。