Skip to content

Commit 79ae02a

Browse files
author
hollis.zhl
committed
增加注解与泛型相关知识点
1 parent f2eae06 commit 79ae02a

File tree

7 files changed

+113
-4
lines changed

7 files changed

+113
-4
lines changed

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,11 @@ apache集合处理工具类的使用、
175175

176176
#### 注解
177177

178-
元注解自定义注解、Java中常用注解使用、注解与反射的结合
178+
[元注解](/basics/java-basic/meta-annotation.md)[自定义注解](/basics/java-basic/custom-annotation.md)、Java中常用注解使用、注解与反射的结合
179179

180-
Spring常用注解
180+
[如何自定义一个注解?](/basics/java-basic/create-annotation.md)
181+
182+
[Spring常用注解](/basics/java-basic/annotation-in-spring.md)
181183

182184
#### JMS
183185

@@ -193,9 +195,9 @@ Spring常用注解
193195

194196
限定通配符和非限定通配符、上下界限定符extends 和 super
195197

196-
List<Object>和原始类型List之间的区别?
198+
[List<Object>和原始类型List之间的区别?](/basics/java-basic/genericity-list.md)
197199

198-
List<?>和List<Object>之间的区别是什么?
200+
[List<?>和List<Object>之间的区别是什么?](/basics/java-basic/genericity-list-wildcard.md)
199201

200202
#### 单元测试
201203

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
2+
3+
@Scope注解 作用域
4+
5+
@Lazy(true) 表示延迟初始化
6+
7+
@Service用于标注业务层组件、
8+
9+
@Controller用于标注控制层组件@Repository用于标注数据访问组件,即DAO组件。
10+
11+
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
12+
13+
@Scope用于指定scope作用域的(用在类上)
14+
15+
@PostConstruct用于指定初始化方法(用在方法上)
16+
17+
@PreDestory用于指定销毁方法(用在方法上)
18+
19+
@DependsOn:定义Bean初始化及销毁时的顺序
20+
21+
@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
22+
23+
@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:
24+
25+
@Autowired @Qualifier("personDaoBean") 存在多个实例配合使用
26+
27+
@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
28+
29+
@PostConstruct 初始化注解
30+
31+
@PreDestroy 摧毁注解 默认 单例 启动就加载
32+
33+
34+
### Spring中的这几个注解有什么区别:@Component@Repository@Service@Controller
35+
36+
37+
1. @Component指的是组件,
38+
39+
@Controller@Repository@Service 注解都被@Component修饰,用于代码中区分表现层,持久层和业务层的组件,代码中组件不好归类时可以使用@Component来标注
40+
41+
2. 当前版本只有区分的作用,未来版本可能会添加更丰富的功能
42+
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
在Java中,类使用class定义,接口使用interface定义,注解和接口的定义差不多,增加了一个@符号,即@interface,代码如下:
2+
3+
public @interface EnableAuth {
4+
5+
}
6+
7+
注解中可以定义成员变量,用于信息的描述,跟接口中方法的定义类似,代码如下:
8+
9+
public @interface EnableAuth {
10+
String name();
11+
}
12+
13+
还可以添加默认值:
14+
15+
public @interface EnableAuth {
16+
String name() default "猿天地";
17+
}
18+
19+
上面的介绍只是完成了自定义注解的第一步,开发中日常使用注解大部分是用在类上,方法上,字段上,示列代码如下:
20+
21+
@Target(ElementType.METHOD)
22+
@Retention(RetentionPolicy.RUNTIME)
23+
@Documented
24+
public @interface EnableAuth {
25+
26+
}
27+
28+
Target
29+
30+
用于指定被修饰的注解修饰哪些程序单元,也就是上面说的类,方法,字段
31+
32+
Retention
33+
34+
用于指定被修饰的注解被保留多长时间,分别SOURCE(注解仅存在于源码中,在class字节码文件中不包含),CLASS(默认的保留策略,注解会在class字节码文件中存在,但运行时无法获取),RUNTIME(注解会在class字节码文件中存在,在运行时可以通过反射获取到)三种类型,如果想要在程序运行过程中通过反射来获取注解的信息需要将Retention设置为RUNTIME
35+
36+
Documented
37+
38+
用于指定被修饰的注解类将被javadoc工具提取成文档
39+
40+
Inherited
41+
42+
用于指定被修饰的注解类将具有继承性
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
除了元注解,都是自定义注解。通过元注解定义出来的注解。
2+
如我们常用的Override 、Autowire等。
3+
日常开发中也可以自定义一个注解,这些都是自定义注解。
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
List<?> 是一个未知类型的List,而List<Object> 其实是任意类型的List。你可以把List<String>, List<Integer>赋值给List<?>,却不能把List<String>赋值给 List<Object>。

basics/java-basic/genericity-list.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
原始类型List和带参数类型<Object>之间的主要区别是,在编译时编译器不会对原始类型进行类型安全检查,却会对带参数的类型进行检查。
2+
3+
通过使用Object作为类型,可以告知编译器该方法可以接受任何类型的对象,比如String或Integer。
4+
5+
它们之间的第二点区别是,你可以把任何带参数的类型传递给原始类型List,但却不能把List<String>传递给接受 List<Object>的方法,因为会产生编译错误。

basics/java-basic/meta-annotation.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
说简单点,就是 定义其他注解的注解 。
2+
比如Override这个注解,就不是一个元注解。而是通过元注解定义出来的。
3+
4+
@Target(ElementType.METHOD)
5+
@Retention(RetentionPolicy.SOURCE)
6+
public @interface Override {
7+
}
8+
9+
这里面的
10+
@Target
11+
@Retention
12+
就是元注解。
13+
14+
元注解有四个:@Target(表示该注解可以用于什么地方)、@Retention(表示再什么级别保存该注解信息)、@Documented(将此注解包含再javadoc中)、@Inherited(允许子类继承父类中的注解)。

0 commit comments

Comments
 (0)