PPT:https://ptteng.github.io/PPT/PPT-java/Java_task02_10.html#/
视频:https://v.qq.com/x/page/a0544sh8jq7.html
什么是注解
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
2.知识剖析
为什么要使用注解
优点: 1、节省配置,减少配置文件大小 2、编译时即可查看正确与否,提高效率 3.相对于配置文件而言更为简洁,易于配置
缺点: 1、增加了程序的耦合性,因为注解保存在class文件中,而且比较分散 2、若要对配置进行修改需要重新编译
3.常见问题
该如何在spring里加载注解?
在spring中,每使用一个注解就要声明一个bean
比如 :使用@Autowired注解,必须事先在Spring容器中声明AutowiredAnnotationBeanPostProcessor的Bean:
使用 @Required注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean:
类似地,使用@Resource、@PostConstruct、@PreDestroy等注解就必须声明 CommonAnnotationBeanPostProcessor;使用@PersistenceContext注解,就必须声明 PersistenceAnnotationBeanPostProcessor的Bean。
样的声明未免太不优雅,所以Spring为我们提供了一种极为方便注册这些BeanPostProcessor的方式,即使用context:annotation- config标签,隐式地向 Spring容器注册各种bean
另外,在我们使用注解时一般都会配置扫描包路径选项:context:component-scan base-package="pack.pack"/
该配置项其实也包含了自动注入上述processor的功能,因此当使用context:component-scan后,即可将context:annotation-config标签省去。
@autowired注解是如何加载的?自动注入是怎样实现的??
@autowired是通过动态代理和反射,在类加载过程中动态生成代理类,当初始化全局变量时,代理类跳到invoke方法,然后通过反射获取field字段对象,在method.invoke()的调用前即可实现注入。aop和拦截器以及常用注解等功能的实现都是基于动态代理实现的。
5.编码实战
6.扩展思考
为什么每次执行main函数,控制台信息的输出顺序会发生变化?