<bean id="" class=""> <property name="属性" value="35"/><property name="name" value="jack"/></bean> 2.2引入其他Bean<bean> <property name="" ref="其他bean的id"/></bean> 还可以注入内部Bean。内部Bean就是定义在其他Bean内部的Bean。<bean> <property name="'> <bean class=""/> </property></bean><bean> <constructpr-arg > <bean class=""/> </constructor-arg></bean> 内部Bean没有id属性,因为id属性没有必要,不会通过id来引用内部Bean,这也突出了内部Bean的最大缺点:不能复用。内部Bean仅适用于一次注入,而且不能被其他Bean引用。2.3使用命名空间p来装配Bean的属性<bean id="" class="" p:name="" p:age="" p:A-ref=""/>p:xxx来指定属性。-ref标识表示装配的是引用而不是值。和<property>是等价的。2.4装配集合 1.<list>:装配list类型的值,元素允许重复。 2.<set>:装配set类型的值,元素不允许重复 3.<map>:装配map类型的值,名称和值可以是任意类型。 4.<props>:装配properties类型的值:名称和值都是string类型。2.4.1 list和set<bean> <property name=""> <list> <ref bean=""/> <ref bean=""/> <ref bean=""/> </list> </property> <property name=""> <set> <value></value> <value></value> </set> </property></bean>list和set都可以用来装配类型为Collection的任意实现或数组的属性。意思就是如果属性为List list,可以用set来装配。2.4.2装配集合<property name=""> <map> <entry key="" value=""/> <entry key="" value-ref=""/> <entry key-ref="" value=""/> <entry key-ref="" value-ref=""/> </map> </property>key:指定map中entry中的键value:指定map中entry中的值key-ref:指定map中entry的键为上下文中其他Bean的引用。value-ref:指定map中entry的值为上下文中其他Bean的引用。<property name="">//键值都为string时使用,也可以使用map <props> <prop key=""></prop> <prop key=""></prop> <prop key=""></prop> </props> </property><property>:用来给Bean的属性注入值或者引用<props>:用来定义一个properties类型的集合值<prop>:用来定义一个<props>中的成员。2.5装配空值 spring可以把属性设置为null值。<property name="" ><null/></property> 可能某个属性要设置为null值,或者覆盖自动装配的值就可以用这种方式。3.使用表达式装配
上面讲的方式是静态的。要使用动态的方式可以使用Spring表达式语言(SpEL),它通过运行期的表达式将值或引用传递到Bean的属性或构造器中。字面值:<bean> <property name="" value="#{23}"/> <property name="" value="name is #{23}"/> <property name="" value="#{1e4}"/>//10000.0<property name="" value="#{'jack'}"/>//string类型的值</bean>引用Bean、properties和方法:SpEL可以通过id来引用其他的Bean<property name="" value="#{abc}"/>//引用Bean<property name="" value="#{abc.name}"/>//引用Bean中的属性<property name="" value="#{abc.getA()}"/>//引用Bean中方法返回的值<property name="" value="#{abc.getA().toUpperCase()}"/>//引用Bean中方法返回的值,大写,不能返回null,会报空指针异常<property name="" value="#{abc.getA()?.toUpperCase()}"/>//引用Bean中方法返回的值,大写,?左边为null,什么都不做,不是null执行?后面的操作操作类:T{}会调用类作用域的方法和常量。可以访问类的静态方法和常量<property name="" value="#{T{java.lang.Math}.PI}"/><property name="" value="#{T{java.lang.Math}.random()}"/>数值运算:<property name="" value="#{T{java.lang.Math}.PI*100}"/><property name="" value="#{abc.age + 10}"/><property name="" value="#{abc.age +' ' +abc.name}"/>比较值:<property name="" value="#{abc.age == 18}"/><property name="" value="#{abc.age <= 18}"/>正则表达式:匹配返回true,否则false<property name="" value="#{abc.email matches '[xxxxx]'}"/>操作集合: 使用<util:list>配置一个集合。<util:list id="aaa"> <bean class="" p:xxx="" p:xxx-ref=""/></util:list>访问集合元素:<property name="" value="#{aaa[2]}"/><util-properties id="bbb" location="classpath:bbb.properties" />查询集合成员:<property name="" value="#{aaa.?[age ==18]}"/>.?返回的是[]中为true的集合,.^[]和.$[]返回的是第一和最后匹配项。不要多过使用这些表达式
新闻热点
疑难解答