• spring(一)-基本概念


    1、定义与特点

      定义:一个分模块的一站式后台开发框架。

      特征:

      (1)比起EJB,更轻量级别的容器框架,模块形式组织,只需要调用相应模块(jdbc、springmvc)

      (2)Spring IOC低耦合容易组合对象之间的关系

      (2)AOP更易对功能进行扩展,不需要将无关代码写进主业务中

      (3)Spring并不是直接造轮子,而是利用已有技术,比如ORM(对象关系映射,将对象映射到数据库)框架,logging框架;

    2、  IOC/DI

      控制反转/依赖注入, bean本身不相互依赖,产生关系的活动进行不依赖于任何一方,整个依赖关系构建(注入)由第三方负责管理。

      控制反转其实现方法是依赖注入,甲方开放接口,在它需要的时候,能够让乙方传递进来(注入)

      传统的方式是通过在程序中自己new对象A,再构建依赖对象B并注入到A中;

       

      而Spring中创建和注入对象这过程交给了IOC容器处理,即动态的向某个对象提供他所需要的依赖对象,基础技术是反射。

      

      优点1,不必要了解下层类代码(历史维护的底层代码),直接在需要的时候注入。实际项目中,有的Service Class可能是十年前写的,有几百个类作为它的底层。假设我们新写的一个API需要实例化这个Service,就需要了解大量历史代码。IoC Container的这个特性就很完美的解决了这类问题——因为这个架构要求你在写class的时候需要写相应的Config文件,所以你要初始化很久以前的Service类的时候,前人都已经写好了Config文件,你直接在需要用的地方注入这个Service就可以了。这大大增加了项目的可维护性且降低了开发难度。

      优点2,资源由第三方控制,降低耦合度,同时方便资源的配置和管理。

    3、 AOP

      在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

      (个人对于aop理解就是通过代理模式,将与主业务无关的代码插入整个逻辑中,而不污染原有的功能结构)

    4、 bean配置(bean注册)

      (1)    基于xml的bean配置(ApplicationContext)

      使用被Spring命名空间的所支持的一系列的XML标签来实现,如context、beans、jdbc、tx、aop、mvc等。      

           属性<property name="name" value="tom"></property>

      构造方法<constructor-arg value="Mike" name="name"></constructor-arg>

      (2)    基于注解的bean配置

      将bean描述转移到组件类的内部,只需要在相关类上、方法上或者字段声明上使用注解即。

            @Component:泛指通用组件;用于对组件类进行标注

      @Repository:用于对DAO组件类进行标注;

      @Service:用于对Service组件类进行标注;

      @Controller:用于对Controller组件类进行标注;

             (3)基于java类的bean配置(通过代码配置)

             @Configuration所注解的类则表示这个类的主要目的是作为bean定义的资源类似于<beans>;@Bean注解标注某个方法,告知这个方法返回一个对象,类似于<bean>。Ps:与A相比,因为是java代码,可以在编译器检查类型合法和id唯一。

      下图左上是基于java的bean声明的基本语法方式,右上是如何进行bean之间的相互依赖声明,下方是如何初始化和调用的过程。

     

    5、 bean注入(bean使用,eg:类中包含一个类对象bean)

      (1)    基于xml注入-属性注入

      属性注入要求Bean提供一个默认的构造函数,并为需要注入的属性提供对应的SetXXX方法。Spring先调用Bean的默认构造函数实例化Bean对象,然后通过反射的方式调用Setter方法注入属性值。

    public class LogonService implements BeanNameAware{

        private UserDao userDao;

        public void setUserDao(UserDao userDao) {

            this.userDao = userDao;

        }

    }

    <bean id="userDao" class="com.baobaotao.anno.UserDao"/>

    <bean class="com.baobaotao.anno.LogonService">

        <property name="userDao" ref="userDao"></property>

    </bean>

      (2)    基于xml注入-构造方法

      使用构造函数注入的前提是Bean必须提供带参数的构造函数。

    public class LogonService implements BeanNameAware{

        private UserDao userDao;

    public LogonService(){}

        public LogonService(LogDao logDao, UserDao userDao) {

            this.userDao = userDao;

        }}

    <bean id="userDao" class="com.baobaotao.anno.UserDao"/>

    <bean class="com.baobaotao.anno.LogonService">

        <constructor-arg ref="userDao"></constructor-arg>

    </bean>

      (3)    基于注解注入

      @required注释在某个设置方法上,避免因为bean太多导致忘记注入

      @Autowired有更细粒度的装配控制

      @Qualifier(“userDao”)用于处理存在两个相同类型的bean时,自动装配产生歧义的问题

    @Service

    public class LogonService implements BeanNameAware{

        @Autowired(required=false)

        @Qualifier("userDao")

    private UserDao userDao;}

    6、 spring中bean的自动装配

      无须在Spring配置文件中描述JavaBean之间的依赖关系(如配置<property>、<constructor-arg>)。IOC容器会自动建立javabean之间的关联关系。

      (1)    no-默认情况下采用”ref”进行手动绑定;

      (2)    byname-根据名字进行装配

        

      (3)    byType-根据某个bean所持有的依赖变量的数据类型进行自动装配

        

      (4)    constructo-与byType类似,只不过是按照构造函数的参数类型进行对应bean匹配

      (5)    autodetect-自动使用constructor和byType进行自动装配

     

    7、 Spring作用域

      结构:<bean id="userDao" class="com.ioc.UserDaoImpl" D="singleton"/>

      singleton:单例模式,Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象。Singleton作用域是Spring中的缺省作用域,也可以显示的将Bean定义为singleton模式,配置为:

      prototype:原型模式,每次通过Spring容器获取prototype定义的bean时,容器都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态,

      request:在一次Http请求中,容器会返回该Bean的同一实例。而对不同的Http请求则会产生新的Bean,而且该bean仅在当前Http Request内有效,当前Http请求结束,该bean实例也将会被销毁。

      session:在一次Http Session中,容器会返回该Bean的同一实例。而对不同的Session请求则会创建新的实例,该bean实例仅在当前Session内有效。

      global Session:在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效。

    8、 Spring中设计模式

      单例模式-针对bean的singleton作用域

      代理模式-AOP中体现的动态代理

      工厂模式- BeanFactory用来创建对象的实例

  • 相关阅读:
    手机维修费杂乱 消协命令设立扶植行业标准
    ImageList控件的使用方法
    三峡实习记之一
    [原创]2天的搜索经验对IIS的问题的全面解决方案
    亲历虚拟机安装Ubuntu Linux系统
    新的一年,新的开始
    VS2003中实现身份验证的探索经验
    [原创]VS2003中ASP.NET实现自定义用户导航控件
    全面控制Windows任务栏
    单刀赴广州
  • 原文地址:https://www.cnblogs.com/xiongchang95/p/8953184.html
Copyright © 2020-2023  润新知