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
问题:
容器是什么玩意?
四月中旬做完毕设
三月份一天一个功能完成加复习知识准备面试