Spring_Spring的核心_总结

理想是美好的,但没有意志,理想不过是瞬间即逝的彩虹。

Spring的两个核心特性

  Spring为企业级开发提供了丰富的功能,这些功能的底层都依赖于它的两个核心特性:

    1. 依赖注入(dependency injection,DI)

    2. 面向切面编程(aspect-oriented programming,AOP)

依赖注入(IOC)

  1. 通常程序功能的实现由两个或多个类的对象共同协作完成,通过DI,对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象的时候进行设定,对象无需自行创建或管理它们的依赖关系。

  依赖注入将对象所依赖的关系自动交给目标对象,而不是由对象自己去获取依赖,这样对象之间达到了松耦合的目地。

  2. 通俗来理解依赖注入:

    1) 类A的某个方法实现需要调用类B的对象,那么类A依赖类B(因为没有类B对象,类A可能就无法完成某功能),这样就形成的依赖关系A——>B。

    2) 通常我们的做法,是直接在类A中直接new 一个类B的对象,也就是由类A本身创建依赖关系,这样做的缺点是类A与类B之间紧耦合,而Spring的做法是将依赖关系的创建交给容器。

    3) 容器在创建对象的时候将依赖关系注入到类A,这样做达到了类A与类B松耦合的目地。

    4) Spring通过装配将对象的依赖关系注入,通过应用上下文将对象组装起来。

  3. 依赖注入的方式:

    1) 构造器注入

    2) 属性注入

    3) 字段注入(注解方式)

应用上下文

  Spring通过应用上下文装配bean的定义并把它们组装起来。

   Spring自带了多种应用上下文的实现,下面是最常用的几个:

    1)ClassPathXmlApplicationContext

    2)AnnotationConfigApplicationContext

    3)AnnotationConfigWebApplicationContext

    4)FileSystemXmlApplicationContext

    5)XmlWebApplicationContext  

装配bean

  1. Spring装配bean的三种方案(按建议的优先使用顺序):

    1) 自动化装配

    2) 通过Java代码配置

    3) 通过XML配置

  以上三种配置方案,建议尽可能地使用自动化配置的机制,显示配置越少越好。

  2. 自动化装配bean

    2.1 Spring从两个角度来实现自动化装配

      1) 组件扫描:Spring会自动发现应用上下文中所创建的bean。

      2) 自动装配:Spring自动满足bean之间的依赖。

    2.2 Spring自动化装配主要使用的注解:

      1) @Component:标志要创建的bean

      2) @ComponentScan:启用组件扫描

      3)@AutoWired:将bean的依赖注入。(也可用源于Java依赖注入规范的@Inject注解)

  

  3. 通过Java代码装配bean

    尽管在很多场景下通过组件扫描和自动装配来实现Spring的自动化配置时更为推荐的方式,但是在如使用第三方库中的组件(因为自动化配置需要将注解写到具体的类上,而第三方库的类都是封装、编译的),这时就可以使用Java配置。

    通过Java显示配置Spring:

      1) 创建配置类:使用@Configuration注解声明类为配置类。

      2)声明bean:使用@Bean注解在JavaConfig配置类中声明bean。

  4. 通过XML装配bean

    1) 创建XML文件,并以<bean>元素为根,在XML配置文件的顶部需要引入多个XML模式(XSD文件),这些文件定义了配置Spring的XML元素。

      建议使用Spring Tool Suite插件,通过File->new->Spring Bean Configuration File ,能够创建Spring XML配置文件,并可以选择可用的配置命名空间(如aop)。

    2) 使用<bean>元素声明bean

    3) 使用<constructor-arg>元素或c-命名空间的<c:_ref=""/>借助构造器注入依赖。

    4) 使用<property>元素或p-命名空间的<p:name-ref=""/>装配属性。

面向切面编程(AOP)

  在软件开发中,散布于应用中多处的功能被称为横切关注点。通常来讲,这些横切关注点从概念上是与应用的业务逻辑相分离的,把这些横切关注点与业务逻辑相分离、实现横切关注点和它们所影响的对象之间的解耦正是面向切面编程(AOP)要解决的问题。

  1. 定义AOP术语

    1)通知(Advice)

      通知定义了切面是什么及何时使用。

      通知有5种类型:

        前置通知(Before)

        后置通知(After)

        环绕通知(Around)

        返回通知(After-returning)

        异常通知(After-throwing)

    2)连接点(Join-point)

      连接点是应用执行过程中能够插入切面的一个点。

    3)切点(PoinCut)

      切点定义了何处使用。切点的定义会匹配通知所要织入的一个或多个连接点。

    4)切面(Aspect)

      切面是通知和切点的结合,通知和切点共同定义了切面的全部内容-它是什么,在何时和何处完成其功能。

    5)引入(Intriduction)

      引入允许我们在无需修改现有类的情况下,向现有的类添加新方法或属性,使它们具有新的行为和属性。

    6)织入(Weaving)

      织入是把切面应用到目标对象并创建新的代理对象的过程,切面在指定的连接点被织入到目标对象。

      在目标对象的生命周期有多个点可以织入:

        编译期

        类加载期

        运行期

猜你喜欢

转载自www.cnblogs.com/dandelZH/p/9038724.html