【Spring】【笔记】《Spring In Action》第二章 Bean装配

2.1 声明Bean
2.1.1 创建Spring配置
  • XML文件方式
  • 注解方式
     在XML文件中声明Bean时,Spring配置文件的根元素是来源于Spring beans 命名空间所定义的<bean>元素。
     Spring核心框架自带了10个命名空间配置:

aop 切面、@AspectJ
beans 声明Bean和装配Bean
context Spring应用上下文,自动检测,自动装配Bean,注入非Spring直接管理的对象
jee 与JavaEEAPI的集成,如JNDI和EJB
jms 声明消息驱动的POJO提供了配置元素
lang 支持配置Groovy、JRuby或BeanShell等脚本的Bean
mvc 启用SpringMVC的能力
oxm 支持Spring对象到XML映射配置
tx 声明式事务配置
util 工具类,包括把集合配置为Bean,属性占位符


2.1.3 构造器注入
< constructor-arg value= "15" />
     不配置时,使用默认的构造器
     通过构造器注入对象引用:
<constructor-arg ref=""/>
     通过工厂方法创建Bean:<bean>元素有一个factory-method属性,允许调用一个指定的静态方法,从而代替构造方法来创建一个类的实例

2.1.4 Bean的作用域
     所有Spring Bean默认都是单例,当容器分配一个Bean时,总是返回Bean的同一个实例。
     SpringBean的作用域
  • singleton:单例,默认。在每一个Spring容器中,一个Bean定义只有一个对象实例
  • prototype:允许Bean的定义可以被实例化任意次,每次调用都创建一个实例
  • request:在一次HTTP request中,每个Bean定义对应一个实例,仅在基于web的Spring上下文中有效
  • session:在一个HTTP session中,每个Bean定义对应一个实例,仅在基于web的Spring上下文中有效
  • global-session:在一个全局HTTP session中,每个Bean定义对应一个实例,仅在Portlet上下文有效

2.1.5 初始化和销毁Bean
     使用Bean的init-method和destroy-method属性,指定相应的方法
     如果在上下文中定义的很多Bean都拥有相同名字的初始化方法和销毁方法,可使用<beans>元素的default-init-method和default-destroy-method属性这两个方法,为应用上下文中所有的Bean设置了共同的初始化方法。


2.2 注入Bean属性
     Springle可以借助属性的set方法来配置属性的值实现setter方式注入
2.2.1 注入简单值
     可以使用<property>元素配置Bean的属性。
<property name="" value=""/>

2.2.2 引用其他Bean
<property name="" ref=""/>
     注入内部Bean(inner bean):内部Bean是定义在其他Bean内部的Bean,不能被复用,仅适用于一次注入,不能被其他Bean引用

2.2.3 使用spring的命名空间p装配属性
     命名空间p的schema uri:
http://www.springframework.org/schema/p
     通过此声明,可以使用p:作为<beans>所有属性的前缀来装配Bean的属性
     给属性加-ref后缀来告知spring应装配一个引用

2.2.4 装配集合
     Spring提供了4种类型的集合配置元素:
  • <list> :装配list类型的值,允许重复
  • <set>:装配set类型的值,不允许重复
  • <map>:装配map类型的值,名称和值可以是任意类型
  • <props>:装配properties类型的值,名称和值必须都是string型
     <list>和<set>对应于数组和java.util.collection任意实现
     <map>对应于java.util.Map
     <props>对应于java.util.Properties

     装配List、Set、Array
<bean id="" class="">
     <property name="">
          <list>/<set>
               <ref bean=""/>
          </list>/</set>
     </property>
</bean>
     无论<list>还是<set>都可以用来装配类型为java.util.Collection的任意实现或数组的属性

     装配Map
<bean id="" class="">
     <property name="">
          <map>
               <entry key="" value-ref=""/>
               ...
          </map>
     </property>
</bean>
     <entry>的属性:
key 指定map中entry的键
key-ref 指定map中entry的键位Spring上下文中其他bean的引用
value 指定map中entry的值
value-ref 指定map中entry的值为Spring上下文中其他bean的引用
      当键和值都不是String类型时,将键-值对注入到Bean属性的唯一方法就是使用<map>元素
     
     装配Properties集合
<bean id="" class"">
     <property name="">
          <props>
               <prop key=""> value </prop>
               ...
          </props>
     </property>
</bean>

2.2.5 装配空值
<property name=""><null/></property>


2.3 使用表达式装配
     Spring 3 引入了Spring表达式语言SpEL-Spring Expression Language
2.3.1 SpELl的基本原理
     #{ } 界定符代表其中的值是SpELl表达式
     字面值:可直接加入字面量
引用Bean、Properties和方法:   
#{ Bean | Bean.属性 | Bean.方法 }
null-safe存取器:
      “?.”代替“.” 确保左边项补位null,否则不执行方法
操作类:
     SpELl中使用T()运算符调用类作用域的方法和常量。T( )运算符的结果会返回一个类对象,通过该运算符可以访问指定类的静态方法和常量。

2.3.2 在SpEL值上执行操作
     SpEL运算符:
  • 算数运算: +  -  *  /  %  ^
  • 关系运算: <  >  ==  <=  >=  lt  gt  eq  le  ge
  • 逻辑运算:and  or  not  !
  • 条件运算: ?:(ternary)    ?:(Elvis)
  • 正则运算:matches

     “+”可用于字符串连接
     关系运算对照:
符号名 符号 文本类型
等于 == eq
小于 < lt
小于等于 <=  le
大于 > gt
大于等于 >= ge
     
     三元运算:
  1. 条件?结果1:结果2
  2. 条件(值.属性)?:结果
          条件不为null,结果为条件的值,否则为结果的值

2.3.3 在SpELl中筛选集合
     <util:list>元素由Spring的util命名空间定义,它创建了一个java.util.List类型的Bean,这个集合中包含了配置中的所有Bean,形成一个包含n个bean的List集合
     访问集合成员:
#{ 集合名[ 索引 ] }     //索引从0开始
     访问map:
#{ map名[ key ] }
     访问properties:
#{ Bean名[ '属性' ] }

两种特殊选择属性方法:
  1. systemEnviroment. 包含了应用程序所在机器上的所有环境变量,是一个java.util.Properties集合
  2. systemProperties. 包含了Java应用程序启动时所设置的所有属性(通常通用-D参数)
     [  ]还可用来通过索引来得到字符串的某个字符

查询集合成员  
#{ 集合 .? [条件] }     //符合条件的
#{ 集合 .^ [条件] }     //第一个匹配项
#{ 集合 .$ [条件] }     //最后一个匹配项

投影集合
#{ 集合 .! [条件] }     //从集合中选择每个成员的一种属性,放入一个新的集合中

*建议仅在使用传统方式很难甚至无法装配,但SpELl可以实现时,使用SpEL


第二章小结:
     Spring容器是Spring框架的核心
     BeanFactory:最简单的容器,提供基础的依赖注入和Bean装配服务
     ApplicationContext:提供更高级的框架服务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值