Spring框架:Spring容器具体解释[通俗易懂]

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中。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115530.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jquery 正则表达式验证_前端正则校验

    jquery 正则表达式验证_前端正则校验在实际的开发中,我们经常遇到的校验莫非于非空校验、数字校验、电话校验、邮箱校验,在这里我就以以上校验作例子,其他的校验网上一搜一大把。其实使用正则表达式校验是比较灵活的一种方式,首先介绍正则表达式校验。下面我直接贴代码了,有一点要注意的,就是非空校验,很多时候我们需要校验非空,是连带空格都要校验的,所以例子中的非空校验是会校验空格的。 非空:不能为空 电话号码:请输入正确的电

    2022年10月3日
    0
  • 常见分布式id生成方案_分布式id生成方案

    常见分布式id生成方案_分布式id生成方案文章目录一、为什么要用分布式ID1、什么是分布式ID2、那么分布式ID需要满足哪些条件二、分布式ID有哪些生成方式1、基于UUID2、基于数据库自增ID3、基于数据库集群模式4、基于数据库的号段模式5、基于Redis模式6、基于雪花算法(Snowflake)模式7、百度(uid-generator)8、美团(Leaf)号段模式snowflake模式9、滴滴(Tinyid)Http方式接入Java客户端方式接入三、总结一、为什么要用分布式ID在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式

    2025年7月28日
    0
  • .net Parallel.Foreach的Continue和Break和Return;

    .net Parallel.Foreach的Continue和Break和Return;在Foreach的时候需要多加一个ParallelLoopStatevarparallelOption=newParallelOptions(){MaxDegreeOfParallelism=6}; break类似于for的continue,而stop就类似于for的break Parallel.ForEach(As,parallelOption,(A

    2022年7月19日
    12
  • wing是什么_124个叶结点的完全二叉树

    wing是什么_124个叶结点的完全二叉树设一个 n 个节点的二叉树 tree 的中序遍历为(1,2,3,…,n),其中数字 1,2,3,…,n 为节点编号。每个节点都有一个分数(均为正整数),记第 i 个节点的分数为 di,tree 及它的每个子树都有一个加分,任一棵子树 subtree(也包含 tree 本身)的加分计算方法如下:subtree的左子树的加分 × subtree的右子树的加分 + subtree的根的分数若某个子树为空,规定其加分为 1。叶子的加分就是叶节点本身的分数,不考虑它的空子树。试求一棵符合中序遍历为(1,2,

    2022年8月9日
    4
  • Gamma校正_c++调试方法

    Gamma校正_c++调试方法voidgamma_correction(cv::Mat&src,cv::Mat&dst,floatK){ ucharLUT[256]; src.copyTo(dst); for(inti=0;i<256;i++){ //floatf=(i+0.5f)/255; floatf=i/255.0; f=pow(f,K); //LUT[i]=cv::saturate_cast<uchar>.

    2022年9月22日
    1
  • jar运行发生ClassNotFound的完整解决方案

    jar运行发生ClassNotFound的完整解决方案原文地址:http://www.java2000.net/viewthread.jsp?tid=6053转载请注明上述链接或者CSDN的链接1今天彻底测试了jar程序TestJar.javapackagenet.java2000.test.jar;importjavax.swing.JOptionPane;importorg.springframework.beans.fa

    2022年7月16日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号