• Spring框架:Spring容器具体解释


    Spring容器

    Spring容器能够帮助你管理所有的Bean对象。专业术语称之为IoC控制反转。在传统的程序中。对象的生成都是由开发人员完毕的。而在控制反转中,对象的生成所有都交给框架完毕。这种优点就是降低了程序的依赖性。


    Bean在Spring中的生命周期例如以下:

    • 实例化。

      Spring通过newkeyword将一个Bean进行实例化,JavaBean都有默认的构造函数,因此不须要提供构造參数。

    • 填入属性。Spring依据xml文件里的配置通过调用Bean中的setXXX方法填入相应的属性。
    • 事件通知。Spring依次检查Bean是否实现了BeanNameAware、BeanFactoryAware、ApplicationContextAware、BeanPostProcessor、InitializingBean接口,假设有的话,依次调用这些接口。

    • 使用。应用程序能够正常使用这个Bean了。
    • 销毁。假设Bean实现了DisposableBean接口。就调用其destroy方法。


    定义一个Bean的语法例如以下。

    <beans xmlns="...">
      <bean id="apple" class="com.whitejava.Apple"/>
    </beans>
    


    使用这个Bean时仅仅要通过applicationContext.getBean("apple")就可以获取。


    作用域。

    在Spring中还能够指定Bean的作用域,也就是Bean的寿命。仅仅要设置bean标签的scope属性就可以。Spring提供的生命周期有:singleton整个应用仅仅有一个、prototype每次调用都产生一个新的、request每一个HTTP请求相应一个bean、session每一个HTTP会话相应一个bean、global-session每一个portlet上下文session相应一个bean。

    默认生命周期是singleton。


    初始化和销毁。第一种方法,在xml中的bean标签添加init-method和destroy-method属性来指定初始化和销毁方法。

    另外一种方法,在bean的java类中implements InitializingBean或者DisposableBean接口实现初始化和销毁。第三种方法。在xml中的beans标签中添加default-init-method和default-destroy-method属性。


    另外,能够通过RPC或者JMS配置远程Bean。

    后面的章节有介绍。


    外部配置

    有时候有些关键的属性,比方数据库password,须要放在xml文件之外,便于兴许改动。

    Spring解决问题的方法有两种。一种是属性占位符,一种是属性重写。另外阿里提供的AutoConfig有更好的配置管理机制。将在后面具体介绍。


    关于占位符。首先加载属性文件:

    <context:property-placeholder location="classpath:/db.properties"/>
    或者
    <context:property-placeholder location="file:///etc/db.properties"/>
    


    引用属性中的变量:

    <bean id="dataSource" class="org.springframework.jdbc.datbase.DriverManagerDataSource">
      <property name="driverClassName" value="${jdbc.driverClassName}"/>
      <property name="url" value="${jdbc.url}/>
    </bean>
    


    覆盖properties文件里的变量:

    <util:properties id="defConf>
      <prop key="jdbc.url">jdbc:mysql://localhost/test</prop>
      <prop key="jdbc.driverClassName">com.mysql.jdbc.Driver</prop>
    </util:properties>
    
    <context:property-placeholder location="classpath:/db.properties" properties-ref="defConf" system-properties-mode="OVERRIDE"/>
    除了OVERRIDE还有FALLBACK、NEVER。
    


    覆盖xml配置。

    加载properties文件并覆盖现有的xml配置。

    请看以下的样例:

    <bean id="dataSource" class="xxx">
      <property name="url">jdbc:oracle://xxx</property>
      <property name="username">xxx</property>
    </bean>
    
    <context:property-overrider location="classpath:/db.properties"/>
    


    db.properties文件的内容:

    dataSource.url=jdbc:mysql://xxx
    dataSource.username=yyy
    


    加密配置值。加载经过加密的properties文件:

    <bean id="environmentConfig" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
      <property name="algorithm" value="PBEWithMD5AndDES"/>
      <property name="passwordEnvName" value="DB_ENCRYPTION_PWD"/>
    </bean>
    
    <bean id="stringEncrypter" class="org.jasypt.encryption.pbe.Environment">
      <property name="config-ref" ref="environmentConfig"/>
    </bean>
    
    <bean id="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
      <constructor-arg ref="stringEncrypter"/>
    </bean>
    


    Session

    Spring中的Session一般不须要直接操作,而是将数据保存到Bean容器中的scope=session中。

  • 相关阅读:
    【线程退出】linux线程退出的几个函数
    Apache Doris编译安装记录
    你所不知道的java编程思想
    thinking in java知识小记(一)
    一个程序员的修炼之路
    解决linux不能使用chmod更改权限的问题
    centos6.5配置无线网络
    ubuntu16.04 server安装小记
    vim的基本使用方法
    微信之父张小龙经典演讲164页PPT:《微信背后的产品观》
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5340655.html
Copyright © 2020-2023  润新知