标签:
Ioc 反转控制 反转资源获取的方向
分离接口与实现
采用工厂模式
采用反转控制
?
Di 依赖注入 依赖容器把资源注入
?
配置bean 通过全类名(反射)
配置形式:基于xml方式
Ioc容器的beanFactory&ApplicationContext
依赖注入的方式:属性注入,构造器注入
?
?
Bean必须要有一个无参的构造函数
Class:bean的全类名,通过反射的方式在IOC容器中创建bean,所以要求bean中必须有无参的构造函数
id :bean 的标示,id唯一
?
applicationContext 是spring的ioc容器,是一接口。
其实现类:
ClassPathXmlApplicatContext从类的路径下来加载配置文件
Getbean()
FileSystemXmlApplicationContext
?
属性注入
通过setter方法注入bean的属性值或依赖的对象
属性注入使用<property>元素,使用name属性指定bean的属性名称,value属性或<value>子节点指定属性值。
属性注入是实际应用中最常见的注入方式。
<bean id="helloWorld" class="com.test.bean.HelloWorld"> ????????<property name="name" value="spring"></property> ????</bean> |
构造函数注入
<!-- 通过构造函数配置bean的属性 --> ????<bean id="car" class="com.test.bean.Car"> ????????<constructor-arg value="audi" index="0"></constructor-arg> ????????<constructor-arg value="shanghai" index="1"></constructor-arg> ????????<constructor-arg value="30000" index="2" type="double"></constructor-arg> ????</bean> ???? ????<bean id="car2" class="com.test.bean.Car"> ????????<constructor-arg value="bwm"></constructor-arg> ????????<constructor-arg value="shandong"></constructor-arg> ????????<constructor-arg value="30000" type="int"></constructor-arg> ????</bean> |
使用构造器注入属性值可以指定参数的位置和参数的类型!以区分重载的构造器!
如果value字面的值中包含特殊字符就可以通过<![CDATA[字符串]]>的形式注入。
我们也可通过value子节点进行配置
?
可以使用property的ref属性建立bean之间的引用关系。
????<bean id="person" class="com.test.bean.Person"> ????????<property name="name" value="zhangsan"></property> ????????<property name="age" value="20"></property> ????????<property name="car" ref="car2"></property> ????</bean> |
?
可以通过一组内置的xml标签来配置集合属性如 list set map
<bean id="person2" class="com.test.bean.collect.Person"> ????????<property name="name" value="lisi"></property> ????????<property name="age" value="20"></property> ????????<property name="cars"> ????????????<list > ????????????????<ref bean="car" /> ????????????????<ref bean="car2" /> ????????????</list> ????????</property> ????</bean> |
?
?
也可通过内部bean来注入属性
?
<bean id="person2" class="com.test.bean.collect.Person"> ????????<property name="name" value="lisi"></property> ????????<property name="age" value="20"></property> ????????<property name="cars"> ????????????<list > ????????????????<ref bean="car" /> ????????????????<ref bean="car2" /> ????????????????<bean class="com.test.bean.Car"> ????????????????????<constructor-arg value="ford"></constructor-arg> ????????????????????<constructor-arg value="济南"></constructor-arg> ????????????????????<constructor-arg value="20000" type="int"></constructor-arg> ????????????????</bean> ????????????</list> ????????</property> |
?
Map注入
<bean id="newPerson" class="com.test.bean.collect.NewPerson"> ????????<property name="name" value="Wangwu"></property> ????????<property name="age" value="20"></property> ????????<property name="cars"> ????????????<map> ????????????????<entry key="AA" value-ref="car"/> ????????????????<entry key="BB" value-ref="car2"/> ????????????</map> ????????</property> ????</bean> |
?
Properties属性注入
? ????<bean id="dataSource" class="com.test.bean.collect.DataSource"> ????????<property name="properties"> ????????????<props> ????????????????<prop key="user">root</prop> ????????????????<prop key="password">root</prop> ????????????????<prop key="jdbcUrl">jdbc:mysql:///test</prop> ????????????????<prop key="driverClass">com.mysql.jdbc.Driver</prop> ????????????</props> ????????</property> ????</bean> |
?
?
?
?
?
?
?
?
?
?
?
标签:
原文地址:http://www.cnblogs.com/chengzhipcx/p/4761683.html