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


问题:




容器是什么玩意?




四月中旬做完毕设


三月份一天一个功能完成加复习知识准备面试