1、@SuppressWarnings
作用:用于抑制编译器产生告警
用法:@SuppressWarnings(“unchecked”)、@SuppressWarnings(“static-access”)等
2、@Autowired
作用:完成自动装配,可以作用于类成员变量、方法及构造函数上。
用法:当扫描到@Autowired时,会自动在容器中查找对应的bean,并装配给该对象的属性。
如何让容器找到对应的bean呢?有这样几种方法:
1)在spring的配置文件中声明bean,可以被spring找到。
<bean id="noShardedRedisCacheUtil" class="com.maiyajf.base.redis.utils.NoShardedRedisCacheUtil">
<property name="jedisClient" ref="jedisClient" />
</bean>
2)用@Component、@Controller、@Service、@Reposity等注解,同时在spring配置文件中加入扫描路径,被这几个注解修饰的bean会被容器扫描到。
<context:component-scan base-package="com.maiya.mobile">
</context:component-scan>
3、@Resource
作用:与@Autowired一样,可以实现自动装配
也有不一样的地方,@Autowired是根据类型(byType)来注入的,如果有重写,就不好用@Autowired了。@Resource提供了byType和byName两种方式,如果有重写,可以根据name进行区分。
4、@Component、@Controller、@Service、@Reposity
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Controller用于标注控制层组件
@Service用于标注业务层组件
@Repository用于标注数据访问组件,即DAO组件
@Repository在项目中基本没有使用,因为通过这样的配置就无需写注解就能扫描到
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage"
value="com.maiyajf.loan.*.dao,com.maiyajf.base.utils.sequence" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryOracle"></property>
</bean>
5、@Override
作用:表示重写,增强可读性。如实现接口时,加上这个注解。
6、@Value
作用:从配置文件中读取参数,例:@Value("${push_cs_whiteList}")
需要在spring配置文件中配置
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/config/application.properties</value>
<value>classpath:/config/db.properties</value>
</list>
</property>
</bean>
7、@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping注解有六个属性:
1)、 value, method;
value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method: 指定请求的method类型, GET、POST、PUT、DELETE等;
2)、consumes,produces
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
3)、params,headers
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
8、@PathVariable
作用:用来获得请求url中的动态参数
9、@RequestBody
作用:POST或者PUT的数据是JSON格式的字符串或者XML格式,而不是普通的键值对形式。发送请求时,要设置contentType,contentType:”application/json,明确的告诉服务器发送的内容是json。由于Spring中使用的json转换用到的是jackson,所以需要引入jackson包。
@RequestMapping("/update")
@ResponseBody
public ServiceResult<String> update(@RequestBody PermissionDto record, Model model) {
record.setCreateUser(ShiroUtils.getCurrentUserName());
ServiceResult<String> result = permissionService.edit(record);
return result;
}
10、@ResponseBody
作用:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用。例如ajax请求时。
@RequestMapping("/checkActivityInfo")
@ResponseBody
public AjaxResult checkEmployeeInfo(ActivityDto dto) {
ServiceResult<Integer> result = activityService.checkEmployeeInfo(dto);
return AjaxResult.success((Object) result.getData());
}
11、@requestParam
作用:常用来处理简单类型的绑定
@Controller
@RequestMapping("/pets")
@SessionAttributes("pet")
public class EditPetForm {
// ...
@RequestMapping(method = RequestMethod.GET)
public String setupForm(@RequestParam("petId") int petId, ModelMap model) {
Pet pet = this.clinic.loadPet(petId);
model.addAttribute("pet", pet);
return "petForm";
}
// ...
12、@RequestHeader
作用:从Http请求头中提取指定的某个请求头.等价于HttpServletRequest.getHeader(String)
13、@CookieValue
作用:从Http请求头中的Cookie提取指定的某个Cookie
14、@Path
作用:rest风格的接口上需要加上此注释,可以写在类或方法上。
15、@PathParam
作用:rest风格的接口上获取参数,用于动态参数。
16、@queryparam
作用:rest风格的接口上获取参数,用于普通参数。
17、@Produces
作用:rest风格的接口注释代表的是一个资源可以返回的 MIME 类型。
18、@Consumes
作用:rest风格的接口注释代表的是一个资源可以接受的 MIME 类型。
19、 @Aspect
作用是把当前类标识为一个切面供容器读取
20、 @Before
标识一个前置增强方法,相当于BeforeAdvice的功能,相似功能的还有
21、 @AfterReturning
后置增强,相当于AfterReturningAdvice,方法正常退出时执行
22、 @AfterThrowing
异常抛出增强,相当于ThrowsAdvice
23、 @After
final增强,不管是抛出异常或者正常退出都会执行
24、 @Around
环绕增强,相当于MethodInterceptor
25、 @DeclareParents
引介增强,相当于IntroductionInterceptor
26、@Param
作用:这是ibatis的注解,可以用来修饰参数,作为sql的参数。需要注意的是,如果使用@Param,参数可以是多个,并且sql可以使用#{}方式也可以使用 ${}方式。如果不加@Param,参数只能是一个,并且是javaBean,并且参数不可写成 ${}方式。
27、@Lazy
作用:spring默认会在容器启动的时候初始化类,当用@Lazy修饰时,就会延迟到第一次使用时再加载。避免在启动的时候依赖的bean还未创建而产生启动错误。
28、@Async
作用:注解在类上,表示这个类中的所有方法都是异步的。注解在方法上,表示这个方法是异步的,如果类也注解了,则以这个方法的注解为准。
相关的配置:
<task:annotation-driven />
配置:
executor:指定一个缺省的executor给@Async使用。
<task:executor />
配置参数:
id:当配置多个executor时,被@Async(“id”)指定使用;也被作为线程名的前缀。
pool-size:
core size:最小的线程数,缺省:1
max size:最大的线程数,缺省:Integer.MAX_VALUE
queue-capacity:当最小的线程数已经被占用满后,新的任务会被放进queue里面,当这个queue的capacity也被占满之后,pool里面会创建新线程处理这个任务,直到总线程数达到了max size,这时系统会拒绝这个任务并抛出TaskRejectedException异常(缺省配置的情况下,可以通过rejection-policy来决定如何处理这种情况)。缺省值为:Integer.MAX_VALUE
keep-alive:超过core size的那些线程,任务完成后,再经过这个时长(秒)会被结束掉
rejection-policy:当pool已经达到max size的时候,如何处理新任务
ABORT(缺省):抛出TaskRejectedException异常,然后不执行
DISCARD:不执行,也不抛出异常
DISCARD_OLDEST:丢弃queue中最旧的那个任务
CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
配置例子:
<task:annotation-driven executor="asyncExecutor" />
<task:executor id="asyncExecutor" pool-size="100-10000" queue-capacity="10"/>
实例:
<!-- 缺省的异步任务线程池 -->
<task:annotation-driven executor="asyncExecutor" />
<task:executor id="asyncExecutor" pool-size="100-10000" queue-capacity="10" />
<!-- 处理log的线程池 -->
<task:executor id="logExecutor" pool-size="15-1000" queue-capacity="5" keep-alive="5"/>
@Override
@Async("logExecutor") //如果不指定名字,会使用缺省的“asyncExecutor”
public void saveUserOpLog(TabUserOpLog tabUserOpLog) {
userOpLogDAO.insertTabUserOpLog(tabUserOpLog);
}
29、@ModelAttribute
作用:
1)当 @ModelAttribute 标记在处理器方法参数上的时候,表示该参数的值将从模型或者 Session 中取对应名称的属性值,该名称可以通过 @ModelAttribute(“attributeName”) 来指定,若未指定,则使用参数类型的类名称(首字母小写)作为属性名称。
2)当 @ModelAttribute 标记在方法上的时候,该方法将在处理器方法执行之前执行,然后把返回的对象存放在model属性中,属性名称可以使用 @ModelAttribute(“attributeName”) 在标记方法的时候指定,若未指定,则使用返回类型的类名称(首字母小写)作为属性名称。
30、@SessionAttributes
作用:当 @SessionAttributes标记在方法上的时候,该方法将在处理器方法执行之前执行,然后把返回的对象存放在session属性中,属性名称可以使用 @SessionAttributes(“attributeName”) 在标记方法的时候指定,若未指定,则使用返回类型的类名称(首字母小写)作为属性名称。