• 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()方法。

        

      

      

      

      

  • 相关阅读:
    如何保证service不被系统杀死
    查找算法
    java多线程学习
    设计模式-单例
    Python2.7-内置类型
    Python2.7-内置函数
    准备要学的东西
    Python-2.7 : 编码问题及encode与decode
    【JZOJ4637】大鱼海棠【博弈论】
    【JZOJ4637】大鱼海棠【博弈论】
  • 原文地址:https://www.cnblogs.com/zhaoguoying/p/11077176.html
Copyright © 2020-2023  润新知