在学习spring 之前我我们需要学习一下相关的概念

IOC(Inversion of Control)控制反转

我们在创建实体的时候,其对象属性都是直接new出来然后进行赋值等操作。而IOC则是创建一个容器,由Ioc容器来控制对象的创建;IOC容器帮我们负责控制对象的生命周期,在需要使用对象的时候直接从容器中获取。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

DI(Dependency Injection)依赖注入

组件之间依赖关系由容器在运行期决定,由容器动态的将某个依赖关系注入到组件之中。通俗的说,由spring管理的bean,其依赖的对象,是由spring注入的。

aop

面向切面编程,是OOP的延续。它包括了如下概念

  • 切面(Aspect)
  • 通知(Adice)
  • 引入(Introduction)
  • 切点(Pointcut)
  • 连接点(join point)
  • 织入(Weaving)

注解驱动

spring最开始的配置方式通过xml配置的,用过xml的小伙伴都知道xml多么反人类,从Spring Framework 1.2.0版本开始,开始支持Annotation注解,但是其主要的还是以XML配置为准。一直到 Spring Framework 4.x ,注解驱动的编程思想与模型才完善下来。注解驱动的核心思想就是通过注解来配置 注入spring 容器的类的相关特性。

JSR

JSR是JavaSpecification Requests的缩写,意思是“Java 规范提案”。虽然大部分java从业者都是做web应用,但他们对j2ee的相关知识却知之甚少,因为 JSR 和spring是有很大关联性的,因此我们在这里顺便科普一下 JSR的相关知识。

Java各种标准的制定是通过Java Community Process (JCP)进行的。JCP的成员可以根据需要提出Java Specification Request (JSR)。每个JSR都要经过提交给JCP,然后JCP讨论,修订,表决通过,并最终定稿。而JavaEE是一组被通过的JSR的合集。

JSR相关内容介绍:

  • Java Servlet:定义了如何处理Web请求,写过java web 应用的小伙伴应该都知道这个;
  • JDBC(java Database Connectivity):JDBC API为访问不同的数据库提供了一种统一的途径,使用java连接过数据库的小伙伴应该对这个不会陌生;
  • JPA(Java Persistence API):定义了如何编写ORM和数据存取,如 spring-data-jpa和hibernate框架就是实现了该标准框架;
  • JTA(Java Transaction Architecture):定义了如何编写事务相关的代码;
  • JMS(Java Message Service):定义了消息队列规范,典型实现就是activeMQ;
  • CDI(Contexts And Dependency Injection):定义了如何编写依赖注入;
  • EJB(Enterprise JavaBean):定义了javaBean 的相关规范;
  • JSP(Java Server Pages):视图模板规范,现在基本上被淘汰了;
  • JAX(Java API for XML):xml规范;
  • RMI(RemoteMethod Invoke):远程方法调用,区别于RPC(远程过程调用)dubbo就是实现rmi规范的rpc框架;
  • JavaMail:邮件相关的规范。

在EJB规范中,将bean归为以下几类Session Beans、Entity Beans、Message Driven Beans 。我们进行应用开发很少用到EJB框架,但是很多东西原理上是相通的;我们编写web应用必定是多线程环境的,而我们采用三层架构模型开发的spring web 应用为什么controller service 是线程安全的,这就涉及到ejb规范中 bean的状态定义。首先我告诉你答案:无状态的bean(方法bean)是线程安全的,有状态的bean(实体bean)是线程不安全的。bean的状态是指有没有实例变量的对象,有没有存储数据能力。在三层架构模型中 单例的service能保证线程安全的一大原因就是他是无状态的bean(方法bean),一旦你再service中定义了一个基本数据类型并使用了它,你就破坏了它的状态,让它变得不再线程安全。这里面的道理想必小伙伴们应该能够想明白。

results matching ""

    No results matching ""