spring 入门小结2 ——配置属性

spring:开源框架(源码很好,可以看看),简化企业级开发(ejb)

spring 中bean的配置:
IOC:反转资源获取的方向。容器主动地将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式接受资源。
DI:组件以一些预先定义好的方式(如setter方法)接受来自容器的资源注入。

在spring的IOC容器中配置bean
在xml文件中通过bean结点来配置bean
<bean id = "he" class ="com.hl.spring.Helloworld">
<property name = "name2" value = "spring-2">
</property>
</bean>
id:bean的名称,在IOC容器中必须是唯一的,若id没有指定,spring自动将类名作为id的名称。id可以指定多个名字,名字之间用逗号,分号或
者空格分隔。


依赖注入的方法:
1.属性注入:利用setter方法注入bean的属性值或者依赖的对象,最常用
<property name = "name2" value = "spring-2">
</property>


2.构造方法注入:保证bean的实例在实例化后就可以使用
<constructor-arg>中没有name属性
<bean id = "car" class = "com.hl.spring.Car">
<constructor-arg value = "Andi" index = "0"></constructor-arg>
<constructor-arg value = "shanghai" index = "1"></constructor-arg>
<constructor-arg value = "2" type = "double"></constructor-arg>
</bean>


注入属性值的细节:
字面值:可以用字符串表示的值,可以使用value标签或者value属性进行注入。
基本数据类型及其封装类、string等类型都可以采取字面值注入的方式。
若字面值中包含特殊字符,可以使用<![CDATA[]]>把字面值包裹起来。
<value><![CDATA[<shanghai^>]]></value>
value只能表示字面值,不能表示引用数据类型。


引用其他的bean:
1.通过<ref>元素或者ref属性为bean的属性或者构造器参数指定对bean的引用。
2.也可以在属性或者构造器里包含bean的声明这样的bean称为内部bean。


内部bean:
当bean实例仅仅给一个特定的属性使用时,可以将其声明为一个内部bean。内部bean声明直接包含在<property/>或<constructor-arg/>
元素里,不需要包含任何id或者name属性。内部bean不能使用在其他任何地方。




<bean id = "person" class = "com.hl.spring.Person">
<property name = "name" value = "Tom"></property>
<property name = "age" value = "24"></property>

<!-- 可以使用 property的 ref 属性或者<ref/>元素建立bean之间的引用关系-->
<!-- 
<property name="Car" ref = "car2"></property>
<property name="Car"><ref bean = "car2"></ref></property>
-->
 
<!-- 内部bean,不能被外部引用,只能在内部使用。id 省略不写 -->
<property name="car">
<bean class = "com.hl.spring.Car">
<constructor-arg value = "ford"></constructor-arg>
<constructor-arg value = "changan"></constructor-arg>
<constructor-arg value = "20" type = "double"></constructor-arg>
</bean>
</property>
</bean>



可以使用专用的<null/>元素标签为bean的字符串或者其他对象类型的属性注入null值。
<constructor-arg ><null/></constructor-arg>


spring支持级联属性的配置。
注意:属性需要先初始化后才可以为级联属性赋值,否则会出现异常,和struts2不同。为级联属性赋值很少用。


集合属性:
1.在spring中通过内置的xml标签来配置集合属性(<list>,<set>,<map>)
2.配置java.util.List类型的属性,可以指定<list>标签,在标签中包含一些元素。
通过<value>指定简单的常量值。
通过<ref>指定对其他bean的引用。
通过<bean>指定内部bean的定义。
通过<null/>指定空元素。
甚至可以内嵌其他集合。


<!-- 测试如何配置集合属性 -->
<bean id = "person3" class = "com.hl.spring.collection.Person">
<property name="name" value = "List"></property>
<property name="age" value = "27"></property>
<property name="cars" >
<!--  使用list节点为list类型的属性赋值-->
<list>
<ref bean = "car"></ref>
<ref bean = "car2"></ref>
<bean class = "com.hl.spring.Car">
<constructor-arg value = "ford"></constructor-arg>
<constructor-arg value = "changan"></constructor-arg>
<constructor-arg value = "20" type = "double"></constructor-arg>
</bean>
</list>
</property>
</bean>


3.数组的定义和list一样,都是用<list>
4.配置java.util.Set类型的属性,可以指定<Set>标签,定义元素的方法和list一样。
5.配置java.util.Map类型的属性,可以指定<Map>标签
简单常量使用key和value来定义;
bean引用通过key和value-ref 属性定义
<bean id = "map_person" class = "com.hl.spring.collection.Person_Map">
<property name="age" value  = "20"></property>
<property name="name" value = "map_person"></property>
<property name="cars">
<!-- 使用map节点和子节点entry配置Map类型的成员变量 -->
<map>
<entry key = "AA" value-ref = "car"></entry>
<entry key = "BB" value-ref = "car2"></entry>
</map>
</property>
</bean>


6.配置java.util.Properties类型的属性,可以指定<props>标签.
该标签使用多个<prop>作为子标签,每个<prop>标签必须定义key属性。
<bean id = "properties" class = "com.hl.spring.collection.DataSource">
<property name="props">
<!--使用 props和prop子节点来为properties属性赋值 -->
<props>
<prop key = "user">root</prop>
<prop key = "password">1234</prop>
<prop key = "jdbcurl">jdbc</prop>
</props>
</property>
</bean>


7.使用util定义集合
使用基本的集合标签定义集合时,不能将集合作为独立的bean定义,导致其他bean无法引用该集合,
所以无法在bean之间共享集合。
可以使用util schema 里的集合标签定义独立的集合bean。
必须在<bean>根元素里面添加util schema 定义。 


<!-- 配置单例的集合bean,以供多个bean进行引用,需要导入util命名空间(到Namespaces界面打钩) -->
<util:list id = "cars">
<ref bean = "car"/>
<ref bean = "car2"/>
</util:list>

<bean id = "person4" class = "com.hl.spring.collection.Person">
<property name="name" value = "person4"></property>
<property name="age" value = "43"></property>
<property name="cars" ref = "cars"></property>
</bean>


8。p命名空间
通过bean元素属性的方式配置bean的属性。
<!-- 通过p命名空间为bean的属性赋值,需要导入p命名空间  ,相对于传统的配置方式,更加的简洁-->
<bean id = "person5" class = "com.hl.spring.collection.Person" p:age = "30" p:name = "p空间" p:cars-ref="cars" >

</bean>


快捷键:
http://blog.sina.com.cn/s/blog_95feae0d0101a04i.html


问题:


容器是什么玩意?


四月中旬做完毕设
三月份一天一个功能完成加复习知识准备面试



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值