提交 79ae02a7 编写于 作者: H hollis.zhl

增加注解与泛型相关知识点

上级 f2eae060
......@@ -175,9 +175,11 @@ apache集合处理工具类的使用、
#### 注解
元注解、自定义注解、Java中常用注解使用、注解与反射的结合
[元注解](/basics/java-basic/meta-annotation.md)[自定义注解](/basics/java-basic/custom-annotation.md)、Java中常用注解使用、注解与反射的结合
Spring常用注解
[如何自定义一个注解?](/basics/java-basic/create-annotation.md)
[Spring常用注解](/basics/java-basic/annotation-in-spring.md)
#### JMS
......@@ -193,9 +195,9 @@ Spring常用注解
限定通配符和非限定通配符、上下界限定符extends 和 super
List<Object>和原始类型List之间的区别?
[List<Object>和原始类型List之间的区别?](/basics/java-basic/genericity-list.md)
List<?>和List<Object>之间的区别是什么?
[List<?>和List<Object>之间的区别是什么?](/basics/java-basic/genericity-list-wildcard.md)
#### 单元测试
......
@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@Scope注解 作用域
@Lazy(true) 表示延迟初始化
@Service用于标注业务层组件、
@Controller用于标注控制层组件@Repository用于标注数据访问组件,即DAO组件。
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Scope用于指定scope作用域的(用在类上)
@PostConstruct用于指定初始化方法(用在方法上)
@PreDestory用于指定销毁方法(用在方法上)
@DependsOn:定义Bean初始化及销毁时的顺序
@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:
@Autowired @Qualifier("personDaoBean") 存在多个实例配合使用
@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
@PostConstruct 初始化注解
@PreDestroy 摧毁注解 默认 单例 启动就加载
### Spring中的这几个注解有什么区别:@Component 、@Repository、@Service、@Controller
1. @Component指的是组件,
@Controller,@Repository和@Service 注解都被@Component修饰,用于代码中区分表现层,持久层和业务层的组件,代码中组件不好归类时可以使用@Component来标注
2. 当前版本只有区分的作用,未来版本可能会添加更丰富的功能
在Java中,类使用class定义,接口使用interface定义,注解和接口的定义差不多,增加了一个@符号,即@interface,代码如下:
public @interface EnableAuth {
}
注解中可以定义成员变量,用于信息的描述,跟接口中方法的定义类似,代码如下:
public @interface EnableAuth {
String name();
}
还可以添加默认值:
public @interface EnableAuth {
String name() default "猿天地";
}
上面的介绍只是完成了自定义注解的第一步,开发中日常使用注解大部分是用在类上,方法上,字段上,示列代码如下:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EnableAuth {
}
Target
用于指定被修饰的注解修饰哪些程序单元,也就是上面说的类,方法,字段
Retention
用于指定被修饰的注解被保留多长时间,分别SOURCE(注解仅存在于源码中,在class字节码文件中不包含),CLASS(默认的保留策略,注解会在class字节码文件中存在,但运行时无法获取),RUNTIME(注解会在class字节码文件中存在,在运行时可以通过反射获取到)三种类型,如果想要在程序运行过程中通过反射来获取注解的信息需要将Retention设置为RUNTIME
Documented
用于指定被修饰的注解类将被javadoc工具提取成文档
Inherited
用于指定被修饰的注解类将具有继承性
\ No newline at end of file
除了元注解,都是自定义注解。通过元注解定义出来的注解。
如我们常用的Override 、Autowire等。
日常开发中也可以自定义一个注解,这些都是自定义注解。
\ No newline at end of file
List<?> 是一个未知类型的List,而List<Object> 其实是任意类型的List。你可以把List<String>, List<Integer>赋值给List<?>,却不能把List<String>赋值给 List<Object>
原始类型List和带参数类型<Object>之间的主要区别是,在编译时编译器不会对原始类型进行类型安全检查,却会对带参数的类型进行检查。
通过使用Object作为类型,可以告知编译器该方法可以接受任何类型的对象,比如String或Integer。
它们之间的第二点区别是,你可以把任何带参数的类型传递给原始类型List,但却不能把List<String>传递给接受 List<Object>的方法,因为会产生编译错误。
\ No newline at end of file
说简单点,就是 定义其他注解的注解 。
比如Override这个注解,就不是一个元注解。而是通过元注解定义出来的。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
这里面的
@Target
@Retention
就是元注解。
元注解有四个:@Target(表示该注解可以用于什么地方)、@Retention(表示再什么级别保存该注解信息)、@Documented(将此注解包含再javadoc中)、@Inherited(允许子类继承父类中的注解)。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册