zoukankan      html  css  js  c++  java
  • 框架技术----Spring

        Spring是为企业应用开发提供的一个轻量级解决方案,是一个开源的IOC和 AOP框架,通过使用Spring可以大大地提高企业应用的开发效率。它包括有下面这些优点:1、 低侵入式设计,代码的污染极低;2、 Spring容器降低了业务对象替换的复杂性,提高了组件之间的解耦;3、 Spring的AOP支持允许将一些通用任务如:安全,事务,日志等进行集中式处理,从而提供了更 好的复用;4、 Spring的ORM和DAO提供了与第三方持久化框架的良好整合,并简化了底层的数据库访问;5、 Spring的高度开发性,并不强制应用完全依赖于Spring,开发者可自由选择Spring框架的部分或 全部。

        在使用Spring框架时,必须使用到Spring Core Container(Sping容器)。Spring的所有模块都是建立在核心容器之上的,它的主要功能就是将配置文件中的<bean>元素转换成运行时的对象,然后根据配置文件中的描述将它们注入到相应的对象中,它的流程是1、将配置文件读入到容器中;2、通过Java的反射机制将配置文件中对对象的描述转换为Java对象;3、将这些Java对象按照配置文件中的定义将他们注入到各自匹配的对象中去。

        下面我们用一个简单的Spring配置文件来简单描述下他的作用域。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <!-- 定义需要被spring容器管理的Bean组件时,有2个参数是必填的 -->
    <!-- spring容器所生成的Bean对象,有各自不同作用域,有以下5种:

    scope="singleton" ,默认配置,是在容器管理的情况下,是有效的。

    scope="prototype"也叫原型,它的生命周期是:从容器创建,到垃圾回收为止是有效的。换
    句话说,就是spring容器只负责创建,不负责它的生命周期的管理。

    scope="request",也叫请求作用域,它的有效范围是在同一个请求的范围内。

    scope="session", 也叫会话作用域,它的有效范围是在同一个会话的范围内。

    scope="global session" 也叫全局会话作用域,它适用于门户网站,并且服务器之间session同步
    -->

    <bean id="user" class="com.lovo.beans.UserBean" scope="singleton">
    <!-- spring容器允许我们,在创建对象时,通过Set(),初始化某些属性
    <property name="userName" value="张三"></property>
    <property name="password" value="123456"></property> -->


    <!-- spring容器允许我们,在创建对象时,通过构造函数(),初始化某些属性-->
    <constructor-arg index="0">
    <value>张三</value>
    </constructor-arg>

    <constructor-arg index="1">
    <value>123456</value>
    </constructor-arg>

    </bean>

    <!-- byName,byType都是使用setting注入方式 -->
    <!-- byName自动装配的时候,会根据调用者中需要装配的属性名称去查找spring容器,
    看是否有对应的Bean组件的实例存在,如果存在就自动装配,如果不存在,就装配失败
    但不会抛出任何异常,只有当程序运行时,才会抛出空指针异常 -->

    <!-- byType自动装配的时候,会根据调用者中需要装配的属性的类型去查找spring容器,
    看是否有对应的相同类型的Bean组件的实例存在,如果类型是接口,那么就去找接口的实现类,
    如果存在就自动装配,如果不存在就装配不成功,但不会抛出任何异常,运行时,代码会抛出
    空指针。当符合条件的实例多于1个时,它不就知道装配哪一个了,就抛出:UnsatisfiedDependencyException -->

    <!-- constructor构造装配,会根据构造器中的属性类型去查找容器,如果类型是接口,
    那么就去找接口的实现类,如果存在就自动装配,如果不存在就装配不成功, 但不会抛出任何异常,运行时,代码会抛出
    空指针。当符合条件的实例多于1个时,它不就知道装配哪一个了,就抛出:UnsatisfiedDependencyException-->

    <!-- 手动装配>自动装配,当两者同时存在时,以手动装配为准,自动装配虽然简单,直接,粗暴,但是结构不清晰,维护性很差,推荐使用手动装配 -->
    <bean id="userServiceImpl" class="com.lovo.service.impl.UserServiceImpl" autowire="byName">
    <!--手动装配,需要提供setting(); -->
    <property name="userDaoImpl" ref="userDaoImpl"></property>

    <!--手动装配,构造注入,当参数只有1位时,无需定义index=0
    <constructor-arg>
    <ref bean="userDaoImpl"/>
    </constructor-arg> -->

    </bean>

    <bean id="userDaoImpl" class="com.lovo.dao.impl.UserDaoImpl"></bean>

    <import resource="beans.xml"></import>

  • 相关阅读:
    Mybatis批处理
    Mybatis兼容C3P0连接池
    一对多,多对一查询
    缓存
    动态sql
    mybatis 日志记录
    python学习day07-encode和decode
    python学习day07---三级目录优化
    python学习day06练习---三级目录
    python学习day06--02字典增删差改以及字符串的一些方法
  • 原文地址:https://www.cnblogs.com/quanby/p/5686806.html
Copyright © 2011-2022 走看看