常用注解
spring 自带注解:
@Autowired、@Qualifier、@Value、@Primary、@Required、@Component、@Repository、@Service、@Controller
JSR-250注解:
@Resource、@PostConstruct、@PreDestory
JSR-330注解:
@Inject、@Named
@Resource 和 @Autowried 都可以完成依赖注入,但是他们是有区别的,
@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来注入。
它有两个属性是比较重要的:
1、name: Spring 将 name 的属性值解析为 bean 的名称, 使用 byName 的自动注入策略
2、type: Spring 将 type的属性值解析为 bean 的类型,使用 byType 的自动注入策略
@Resource 的装配顺序
1、如果同时指定了 name 属性和 type 属性,那么 Spring 将从容器中找唯一匹配的 bean 进行装配,找不到则抛出异常
2、如果指定了 name 属性值,则从容器中查找名称匹配的 bean 进行装配,找不到则抛出异常
3、如果指定了 type 属性值,则从容器中查找类型匹配的唯一的 bean 进行装配,找不到或者找到多个都会抛出异常
4、如果都不指定,则会自动按照 byName 方式进行装配, 如果没有匹配,则回退一个原始类型进行匹配,如果匹配则自动装配
@Autowried 默认按照类型进行装配注入,默认情况下,它要求依赖对象必须存在,如果允许 null 值,可以设置它 required 为false。
如果我们想要按名称进行装配的话,可以添加一个 @Qualifier 注解解决。
@Repository、@Service、@Controller这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。
如何实现自定义注解呢?
@Target({ElementType.FIELD,ElementType.METHOD,ElementTyp.PARAMEHER,ElementTyp.ANNOTION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Value{
String value();
}
@Target标注了该注解可以使用的地方,如可以使用在属性、方法、参数及注解类型上。
@Retention存在的生命周期。
@Documented是否写入帮助文档中去
上述大部分内容转载自Hosens spring注解简介,谢谢