Springd的IOC(2)

来源:互联网 发布:android 涂鸦板 源码 编辑:程序博客网 时间:2024/06/08 10:46

Spring IOC 第二部分,接spring的IOC(1)


bean之间的关系:

1.继承

a.Spring允许继承Bean的配置,被继承的Bean称之为父bean,继承这个父bean的bean称为子bean

b.子bean从父bean中继承配置,包括bean的属性配置。

c.子bean可以覆盖从父bean继承过来的配置

d.父bean可以作为配置模板,也可以作为bean实例。若只想把bean作为父模板,可以设置<bean>的abstract属性为true,这样spring就不会实例化这个bean

e.也可以忽略父bean的class属性,让子bean指定自己的类,而共享相同的属性配置,但此时abstract属性必须设为true

f.并不是<bean>元素里的所有属性都会被继承,比如autowire,abstract等。

2.依赖

1.使用depends-on属性设置依赖的bean。依赖的bean会在本bean实例化之前创建好,并不会自动赋值给bean的同名属性

2.如果依赖多个bean,则可以通过逗号,空格的方式配置bean的名称



bean的作用域:

1.singleton

在springIOC容器中仅存在一个bean的实例,bean以单实例的方式存在于SpringIOC容器中。


2.prototype

每次调用getBean()方法是都会返回一个新的实例


3.web 环境(用得比较少)

4.request

每次http请求都会创建一个新的bean(该作用域仅适用于webapplicationContext 环境)

5.session

同一个http Session共享一个bean,不同的httpsession使用不同的bean(该作用域仅适用于webapplicationContext环境)


使用外部属性文件:

1.在配置文件配置bean时,有时候需要在bean的配置里混入系统部署的细节信息(例如文件路径,数据源配置信息等)。而这些部署细节实际上需要和bean配置相分离

2.spring提供了一个PropertyPlaceholderConfigurer的beanfactory后置处理器,这个处理器允许用户将bean配置的部分内容外移到属性文件中。可以在bean配置文件里使用形式为${var}的变量。propertyPlaceholderConfigurer从属性文件里加载属性并使这些属性来替换变量

3.spring还允许在属性文件中使用${propName},以实现属性之间的相互引用



Spring2.5之后可以通过<context:property-placeholder>元素简化配置

1.配置文件中必须添加context命名空间

(xmlns:context="http://www.springframework.org/schema/context")

在配置文件中加入如下配置

《导入属性文件》

<context:property-placeholder location="classpath:db.properties">


SpEL(spring的el表达式)

Spring表达式语言(简称SpEL)是一个支持运行时查询
和操作对象图的强大的表达式语言
语法类似于EL,EL使用${…}语法格式,而SpEL使用#{…}


语法格式
SpEL可以为Bean的属性进行动态赋值
SpEL可以实现如下一些功能
 通过Bean的id对Bean进行引用
 调用方法以及引用对象中的属性
 计算表达式的值
 正则表达式的匹配


SpEL(Spring的表达式语言)
字面值(一般不会这么使用,没有什么意义,因为可以直
接写)
 整数
<property name="age" value="#{25}"/>
 布尔值
<property name="gender" value="#{true}"/>
 字符值
<property name="gender" value="#{'1'}"/>
 小数
<property name="salary" value="#{5432.45}"/>
 科学计数法
<property name="salary" value="#{1e5}"/>
 String可以使用单引号或者双引号作为字符串的定界符号
<property name="name" value="#{'xm'}

通过T()使用一个类的静态方法。他将返回一个Class的类对象,然后再用该类对象调用其对应的静态属性和静态方法


调用其他bean的静态属性

<property name="pi"  value="#{T(java.lang.Math).PI}">

调用其他bean的静态方法

<property name="result" value="T(java.lang.Math).pow(10,5)">


算术运算符
 +
<property name="score" value="#{score.chinese+10}"/>
 -
<property name="score" value="#{score.chinese-10}"/>
 *
<property name="score" value="#{score.chinese*10}"/>
 /
<property name="score" value="#{score.chinese/10}"/>
 %
<property name="score" value="#{score.chinese%10}"/>
 ^
<property name="score" value="#{score.chinese^2}"/>
 "+"号作为字符串连接使用
<property name="desc"
value="#{student.name+','+student.age}"/>

关系运算符
 <(lt)
<property name="result" value="#{score.chinese lt 60}"/>
<property name="result">
<value><![CDATA[#{score.chinese<60}]]></value>
</property>
 >(gt)
<property name="result" value="#{score.chinese gt 60}"/>
 ==(eq)
<property name="result" value="#{score.chinese == 60}"/>
<property name="result" value="#{score.chinese eq 60}"/>
 <=(le)
<property name="result" value="#{score.chinese le 60}"/>
 >=(ge)
<property name="result" value="#{score.chinese ge 60}"/>


SpEL(Spring的表达式语言)
条件运算符
 条件表达式?结果1:结果2
<property name="desc" value="#{score.chinese>=60?'及格':'不
及格'}"/>
<property name="name"
value="#{user.name!=null?user.name:'zhangsan'}"/>
 条件表达式 ?: 结果
<property name="name"
value="#{user.name!=null?:'zhangsan'}"/>


正则表达式
 matches
<property name="email" value="#{user.email matches '[a-zA-
Z0-9._%+_]+@[a-zA-Z0-9.-]+\\.com'}"/>


bean的生命周期:

init-method  ,destroy-method

    spring容器可以管理bean的生命周期,可以在bean生命周期的特定点执行指定的方法

spring容器对bean的生命周期管理的过程如下

1.通过构造器或工厂方式创建bean的实例

2.为bean的属性设置值或者对其他bean的引用

3.调用bean的初始化方法

4.使用bean

5.关闭容器时,调用bean的销毁方法

<bean ia="address" class="org.stvrandolph.spring.entity.Address"  

init-method="init" destory-method="destory">

<property name="id" value="1"></property>

<property name="province" value="jiangsu"></property>

<property name="city" value="nanjing"></property>

<property name="street" value="jiangning"></property>

</bean>

bean的后置处理器:

1.bean的后置处理器可以在调用初始化方法之前,之后对bean进行额外的处理。

2.bean的后置处理器对IOC容器里的所有bean实例进行逐一处理,而并非单一实例,其典型应用是检查bean属性的正确性或根据特定的标准更改bean的属性。

3.bean的处理器需要实现org.springframework.beans.factory.config.BeanPostProcessor接口,在初始化方法被调用之前之后,spring将把每个bean实例和在该实例在spring容器中id的名字(spring配置文件中的id值),分别传递给接口的两个参数

Bean的生命周期
Bean的后置处理器
 有了Bean的后置处理器之后,Spring容器对Bean的生命周期管
理的过程如下
通过构造器或工厂方法创建Bean的实例
为Bean的属性设置值或者对其他Bean的引用
将Bean实例和Bean的名称传递给Bean的后置处理器的
postProcessBeforeInitialization方法
调用Bean的初始化方法
将Bean实例和Bean的名称传递给Bean的后置处理器的
postProcessAfterInitialization方法
使用Bean
关闭容器时,调用Bean的销毁方法

组件扫描
 Spring容器能够从classpath下自动扫描具有一些特定注解的
Bean,然后加以实例化
 特定的注解
@Component
• 基本注解,标识了一个受Spring容器管理的组件
@Respository
• 标识持久层的组件
@Service
• 标识服务层或者业务层的组件
@Controller
• 标识控制层或者表现层的组件
 Spring特定注解组件的命名策略
类的简单名,并且首字母小写
使用注解中的value属性去指定

。。。。。


如果想要整套的PPT,请联系博主!(注:需要一点小费)

QQ:190486735(非诚勿扰)























原创粉丝点击