spring框架

  这次就对spring框架进行学习,内容是通过网上查找,然后结合书本,对知识点进行总结,可能存在不足,以后会持续更正。

1、什么是spring框架?

    Spring是个java企业级应用的开源的容器性质的轻量级框架,主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。主要有三大特点:容器、IOC(控制反转)、AOP(面向切面)。

2、Spring框架有什么好处?

  • 轻量:Spring是轻量级的,基本的版本大约2MB。
  • 控制反转:Spring通过控制反转实现松耦合,对象给出它们的依赖,而不是创建或查找依赖的对象们。
  • 面向切面的编程:Spring支持面向切面的编程,并且把应用业务路基和系统服务分开。
  • 容器:Spring包含并管理应用中对象的生命周期和配置。
  • MVC框架:Spring的WEB框架是精心设计的框架,是web框架的一个很好的替代品。
  • 事物管理:Spring提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
  • 异常处理:Spring提供方便API把具体的技术相关异常转化为一致的unchecked异常。

3、Spring的组成模块?

  • Core module   
  • Bean module   
  • Context module   
  • Expression Language module   
  • JDBC module   
  • ORM module   
  • OXM module   
  • Java Messaging
  • Service(JMS) module   
  • Transaction module   
  • Web module   
  • Web-Servlet module   
  • Web-Struts module   
  • Web-Portlet module

4、依赖注入(DI)

  需要IOC环境,在个创建Benn对象时,动态的将依赖对象注入到Bean中去。也就是说你不用创建对象,而只需要描述它如何被创建,你不在代码里直接组装你的组件和服务,但是要在配置文件里描述那些组件需要哪些服务,之后一个容器(IOC)负责把他们组装起来。

  依赖注入的方法:

    构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现,该类有一系列参数,每个参数代表一个其他类的依赖。

    Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法即实现了基于setter的依赖注入。

5、Spring中的AOP.

  AOP模块用于发给我们的Spring应用做面向切面的开发。AOP的一种体现就是在Filter过滤器中。在没有Filter之前,解决servlet的乱码问题是很复杂的,每次在接收请求之前,都要写句代码来解决乱码问题,即:request.setCharacterEncoding("UTF-8"),只要写一个servlet,就是写证据代码来解决问题。知道有一天,Filter出现了。我们把解决乱码的那句代码放到Filter中去,从此在servlet中,就再也不用重复写那句代码了。从架构上来说,Filter解决乱码的事放在了所有的servlet上,这样一来切面就形成了。

6、Spring框架中的工厂容器。

  BeanFactory接口是Spring框架的顶层接口,是最原始的接口,通过(BeanFactory的实现类)来启动Spring容器时,并不会创佳Spring容器里面的对象,只有在每次通过getBean()获得对象时才会创建。

  ApplicationContext接口是用来代替BeanFactory接口的,通过 (ApplicationContext的实现类)ClassPathXmlApplicationCotext来启动Spring容器时,就会创建容器中配置的所有对象。   

  BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));

  IHelloService helloService = (IHelloService) beanFactory.getBean("helloService");

  helloService.sayHello();

  区别:Application contexts提供一种方法处理文本消息,一个通常的做法是加载文件资源(比如镜像),它们可以向注册为监听器的bean发布事件。另外,在容器或容器内的对象上执行的那些不得不由bean工厂以程序化方式处理的操作,可以在Application contexts中以声明的方式处理。Application contexts实现了MessageSource接口,该接口的实现以可插拔的方式提供获取本地化消息的方法。

7、Spring中的注解.

  @Repository主要作用域DAO类上,为了让spring能够扫描路径的时候扫描并识别出@Repository,从而扫描到DAO.好处是我们不用在xml中显示的配置扫描每一个Bean。方便了代码的书写,减少了程序员的配置复杂程度。

  @Component可以作用在任何层次,代表了一个Bean

  @Service通常作用在业务层(注入dao),为了让Spring能够扫描类路径的时候识别业务层类。

  @Controller通常作用在控制层(注入服务),可以让spring在扫描的时候扫描到控制层的各个类。

  @Autowired注解可以对类成员变量、方法、以及构造函数进行标注,完成自动装配的工作。

  @Resource注解也是和@Autowired类似的作用。

  @reponsitory(实现dao访问):用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件。

8、Spring框架中的Bean.

  一个Spring Bean的定义包含容器必知的所有配置元数据,包括创建一个Bean,它的生命周期详情及它的依赖。

  给Spring容器提供配置元数据的方法:

    XML配置文件。

    基于注解的配置。

    基于Java的配置

  Spring中Bean的作用域:

    当我们在Spring中定义了一个Bean,作用域可以通过Bean定义中的scope属性来定义。

    singleton:bean在每个Spring ioc容器中只有一个实例。

    prototype:一个bean的定义可以有多个实例。

    request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。

    session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。 

    global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

    缺省的Spring bean的作用域是Singleton.

  Spring框架中bean的生命周期:

   Spring容器 从XML 文件中读取bean的定义,并实例化bean。
      Spring根据bean的定义填充所有的属性。
      如果bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName方
      如果Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。
      如果有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。
      如果bean实现IntializingBean了,调用它的afterPropertySet方法,如果bean声明了初始化方法,调用此初始化方法。
      如果有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。
      如果bean实现了 DisposableBean,它将调用destroy()方法。

    

  

  

  

  

原文地址:https://www.cnblogs.com/zhaoguoying/p/11077176.html