一、问题之初
问:Java,Spring之类的东西到底有多少注解,每个注解是干嘛用的?
该博客主要讲解了:
1)Java中常见的注解:
第一种,JDK自带注解:@Override;@Deprecated;@Suppvisewarnings
第二种,第三方注解:spring中的@Autowired;@Service;@Repository;Mybatis中的@InsertProvider;@UpdateProvider;@Options
2)注解的分类
第一种,按运行机制(注解存在于程序的那个阶段)将注解分为三类:源码注解(只在源码存在)、编译注解(在class文件中也存在)、运行时注解(在运行阶段仍然起作用)
第二种,按照来源来分的话,有如下三类:
1:JDK自带的注解(Java目前只内置了三种标准注解:@Override、@Deprecated、@SuppressWarnings,以及四种元注解:@Target、@Retention、@Documented、@Inherited)
2:第三方的注解——这一类注解是我们接触最多和作用最大的一类
3:自定义注解——也可以看作是我们编写的注解,其他的都是他人编写注解
第三种,按照功能来分的,还有,元注解——注解的注解。
3)自定义注解(这部分直接看原文吧)
4)注解的项目实战(这部分直接看原文吧)
5)注解总结
问:这篇博客主要简单说了一下Java中的注解,可我想知道Spring中的众多注解(虽然我没见过没用过几个)
答:第一篇:Spring常用注解介绍【经典总结】
通过粗略的对文章的扫射,我了解到如下情况:
1.我见过的几个常见注解
@Component :标注一个普通的spring Bean类。
@Repository:标注一个DAO组件类
@Service:标注一个业务逻辑组件类
@Controller:标注一个控制器组件类。
然后,他们四个实质上属于同一类注解,用法相同,功能相同,区别在于标识组件的类型。@Component可以代替@Repository、@Service、@Controller,因为这三个注解是被@Component标注的。上代码:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
String value() default "";
}
2.关于我一直弄不懂的@Resource和@Autowired,文章是这样说的:
1)相同点:@Resource的作用相当于@Autowired,均可标注在字段或属性的setter方法上,用于为类的属性、构造器、方法进行注值。
2)不同点:提供方不同;注入方式不同;属性。其中注入方式不同是说@Autowired只按照byType 注入;@Resource默认按byName自动注入,也提供按照byType 注入;
具体可参考:Spring中 @Autowired注解与@Resource注解的区别
然而,我只看到这里就看不下去了,因为,之后的我都看不懂。于是我搜索了下一篇博客。
spring注解大全与详解 我可以截个图示意一下,全篇表格,适合忘记时查看,但并不适合入门和理解。
继续搜到另一篇:Spring中注解的使用详解 可以说讲解很详细,耐心看下去会懂不少,可我就是喜欢开小差,我突然想到一个问题。
问:spring的 context:component-scan与context:annotation-config都啥意思?我记得老师带我在配置文件里配置过,可有时候会把其中一个删掉,Why?
答:spring context:component-scan与context:annotation-config的区别
总结很明了,如下:
< context:annotation-config/>注册了常用的BeanPostProcessor,而这些BeanPostProcessor 就是让常用注解(@Autowired
、@required
、@Configuration
、@Component
)生效。
<context:component-scan/> 做了< context:annotation-config/>所有做的事,除此之外,还扫描注册base-package下的类。
综上所述,两者只能留其一。
另外还有一篇,比较短:Spring配置项<context:annotation-config>的解释说明
之后我的疑问又增加了
问:base-package是什么东西?为啥要扫描它?
答:spring中注解注入 context:component-scan 的使用说明 (详细的可自行观看原文)
context.component-scan节点
base-package属性告诉spring要扫描的包
use-default-filters=”false”表示不要使用默认的过滤器,此处的默认过滤器,会扫描包含Service,Component,Responsitory,Controller注释修饰类。
赠送一篇base-package详解
问:Spring配置文件到处都是,可是里面的每一行都有啥含义,为啥要配啊?
答:找到一篇好博客:Spring基础学习教程(Spring配置文件详解)-03 ,上几张图就有感觉了。