Spring复习笔记-第一天
介绍Spring:
首先说一下Spring并不是一个针对于某些开发功能的框架,Spring倡导的是针对于Java的设计模式,可以理解为Spring只是一个为我们提供工具的Jar包,在调用这个Jar包时会体现到下文所介绍的设计思想,通过这个设计思想可以为后续的Springboot以及Springcloud提供基础的开发思路。

壹、Spring
作为一个已经烂大街的框架,Spring的内部思想其实并没有那么复杂。针对于初学者来说,Spring难点其实也只是编程思想的切换。大部分人从开始的使用面向对象的语言做着面向过程的开发,转换为真正面向对象就是从Spring开始了解的。像Spring中的赋值其实也就只是底层封装了IO读取xml文件、解析然后通过反射机制为对象进行值插入。

贰、IOC与DI
说到编程思想就不得不提Spring中倡导我们使用的思想IOC/DI,IOC说的是转换了新建对象的控制权力,在JavaEE的学习中又或是日常的代码编写中,我们习惯了new对象的方法去创建一个对象,但是在Spring中,Spring倡导我们通过配置、注解的方式实现一个对象的创建。底层原理可以理解为Spring容器中含有一个对象管理器,针对于这个对象管理器Spring为我们编写了一套通用的class管理,就像我们在反射中学习到的如何通过类名去创建一个对象。实质上ClassPathXmlApplicationContext就是做了这个操作,通过检测(包名.类名)的方式拿到一个Object的对象再通过指向拿到一个类并调用它的无参构造方法,这也是我们再Application.getBean中获取到的对象为什么是Object的原因。再通过我们手动指定强转的方式拿到这个Bean对象。对于DI来说我们再A类中需要调用B类使用,那么由于我们将控制权限(就是new对象的权力)移交给了Spring,那么我们不能手动创建B类这个时候DI的作用就显现了出来。针对于A类中声明的B类包含,Spring容器会自动为我们创建一个B类。这也就是为什么你使用懒加载的时候A类创建了B类也会一起创建的原因。但是单例和C类引发的循环依赖在这里并不能解决。

叁、Bean
Spring中对象的简称,也可以称之为组件。再一个组件中,如果我们想使用它,不可以直接new而是通过(xml去配置一个这样的组件)或(@Bean注解声明的类)。


肆、Spring中注解的使用
1)@Component:可以使用此注解描述 Spring 中的 Bean,但它是一个泛化的概念,仅仅表示一个组件(Bean),并且可以作用在任何层次。
2)@Repository:用于将数据访问层(DAO层),作用与@Component相同。
3)@Service:通常作用在业务层(Service 层),作用与@Component相同。
4)@Controller:通常作用在控制层(Controller层)作用与@Component相同。
5)@Autowired:用于对 Bean 的属性变量、属性的 Set 方法及构造函数进行标注,配合对应的注解处理器完成 Bean 的自动配置工作。默认按照 Bean 的类型进行装配。
6)@Resource:其作用与 Autowired 一样。其区别在于 @Autowired 默认按照 Bean 类型装配,而 @Resource 默认按照 Bean 实例名称进行装配。@Resource 中有两个重要属性:name 和 type。Spring 将 name 属性解析为 Bean 实例名称,type 属性解析为 Bean 实例类型。如果指定 name 属性,则按实例名称进行装配;如果指定 type 属性,则按 Bean 类型进行装配。如果都不指定,则先按 Bean 实例名称装配,如果不能匹配,则再按照 Bean 类型进行装配;如果都无法匹配,则抛出 NoSuchBeanDefinitionException 异常。
7)@Qualifier:与 @Autowired 注解配合使用,会将默认的按 Bean 类型装配修改为按 Bean 的实例名称装配,Bean 的实例名称由 @Qualifier 注解的参数指定。

伍、Bean的属性配置
1)xml配置方式:
<bean id="xxx" class="com.test">
<property name="xxx" value="xxx"></property>
</bean>
2)注解方式:

陆、AOP
AOP 要达到的效果是,保证开发者不修改源代码的前提下,去为系统中的业务组件添加某种通用功能。AOP 的本质是由 AOP 框架修改业务组件的多个方法的源代码,看到这其实应该明白了,AOP 其实就是前面一篇文章讲的代理模式的典型应用。
按照 AOP 框架修改源代码的时机,可以将其分为两类:
1)静态 AOP 实现, AOP 框架在编译阶段对程序源代码进行修改,生成了静态的 AOP 代理类(生成的 *.class 文件已经被改掉了,需要使用特定的编译器),比如 AspectJ。
2)动态 AOP 实现, AOP 框架在运行阶段对动态生成代理对象(在内存中以 JDK 动态代理,或 CGlib 动态地生成 AOP 代理类),如 SpringAOP。
AOP 领域中的特性术语:
1)通知(Advice): AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理。
2)连接点(join point): 连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在 Spring AOP 中,连接点总是方法的调用。
3)切点(PointCut): 可以插入增强处理的连接点。
4)切面(Aspect): 切面是通知和切点的结合。
5)引入(Introduction):引入允许我们向现有的类添加新的方法或者属性。
6)织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的对象,这个过程就是织入。

结束:第一天主要介绍了Spring是如何使用的,以及Bean相关的配置信息,同时还有IOC/DI、AOP的基础知识。明天会针对于Bean进行一个实现。