上一篇介紹了部分的常用注解,喜欢的小伙伴可以看一看,本期继续列举一些常用的注解。
@Service -- service标注业务层组件
这个注解是写在类上面的,标注将这个类交给Spring容器管理,spring容器要为他创建对象。默认按照名称进行装配,名称可以通过name属性指定,如果没有name属性,注解写在字段上时,默认取字段名进行查找,如果注解写在setter方法上,默认按照方法属性名称进行装配。当找不到匹配的bean时,才按照类型进行装配,如果name名称一旦指定就会按照名称进行装配
@Component
最基本的bean注入注解,直接注解在类上,将普通pojo实例化到spring容器中,标注将这个类交给Spring容器管理,之后这个pojo可以相互使用spring容器中的其它对象;(之前在使用时遇到了一个坑,当时使用多线程去定时执行多个定时任务,定时任务中心类没有使用注解注入到spring容器中,导致整线程一直报错提示找不到该类)
@Component
public class CallAPIService implements CallAPIServiceInterface {
/**
* 由于TaskCenterService 这个类时使用spring的注解注入到容器中,调用了通过使用@Autowired注入,
* 那么调用类本身也应被Spring容器管理
*/
@Autowired
private TaskCenterService service;
}
对比下@Controller 、 @Repository、@Service、和 @Component ,这几个注解都是用来将类标记位bean,交给spring容器管理,但是作用范围又有不同。spring默认扫描的注解类型是@Component,不过在@Component的语义基础之上细化为@Reposity,@Service,@Controller。
- @Controller用在控制层,使用该注解的类将会变为一个springMVC Controller对象,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解;
- @Service 标注业务层组件,默认按照名称进行装配,名称可以通过name属性指定
- @Repository 此注解式持久层组件,用于标注数据访问组件,即DAO组
@Primary 自动装配时当出现多个Bean候选于标者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常。
@SerializedName 用于json字段匹配自定义属性名。Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时默认的是将json里对应字段的值解析到java对象里对应字段的属性里面。对于自定义属性名称与json字段不对应时,可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。