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(非诚勿扰)
- Springd的IOC(2)
- springd 的单元测试
- IOC(2)
- IOC、Spring的IOC
- IoC的基本概念 (读书笔记)
- Spring IoC(控制反转)之IoC的使用
- Spring IoC(控制反转)【IoC的技术基础】
- 你真的了解Ioc与AOP吗?(2)
- 你真的了解Ioc与AOP吗?(2)
- spring学习笔记(2)——IOC的理解
- 4 IoC容器的依赖注入(2)
- (2)Spring IoC的第一个例子
- 【spring】深入IOC(2)
- Spring-(2)Spring IOC
- Spring(2)ioc操作
- ioc (2)
- IoC(2)
- Ioc中2种注入的优势
- 1056 最长等差数列 V2
- 63
- android 仿iphoneX上滑退出应用动画(一)
- 详解ThreadPoolExecutor线程池
- 字符编码总结
- Springd的IOC(2)
- JAVA获取txt文件内容
- 1063: 美元和马克(动态规划
- 【期望Dp】【bzoj1426】: 收集邮票
- mysql 高效导入txt数据到表中(load data infile用法)
- PAT 甲级 1037. Magic Coupon (25)
- Java8时间计算
- Java责任链模式
- Python中range()的作用,和我个人的理解