[*] spring加载bean的两种方式
[*] spring依赖注入方式
[*] bean配置
spring加载bean的两种方式
- ClassPathXmlApplicationContext 从类路径下加载配置文件
- FileSystemXmlApplicationContext 从系统文件加载配置文件
- 两个都继承
AbstractRefreshableConfigApplicationContext
实现
// ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ApplicationContext ctx = new FileSystemXmlApplicationContext("F:\\code\\java\\springdemoroot\\spring4.0x\\src\\main\\resources\\applicationContext.xml");
bean的获取
- ctx.getBean(); 不赘述
spring 依赖注入方式
属性注入
- 通过setter方法注入 eg:
<property name="value" value="spring 4.3"/>
(value与class类的setter方法名称对应)
通过构造器注入
- 重载构造器可以通过位置(index)、类型(type)、参数名称(name)区分
- 基本类型、封装类、string 都可以使用
<value>
标签获取value属性注入 - 特殊字符使用
<![CDATA[]]>
进行注入
<!--通过构造器注入1-->
<bean id="car" class="com.sunny.beans.di.Car">
<constructor-arg index="0">
<value><![CDATA[<Benchi^>]]></value>
</constructor-arg>
<constructor-arg index="1">
<value>shanghai</value>
</constructor-arg>
<constructor-arg index="2">
<value>3000</value>
</constructor-arg>
</bean>
<!--通过构造器注入2-->
<bean id="car2" class="com.sunny.beans.di.Car">
<constructor-arg value="240" name="maxSpeed" type="int" index="2"></constructor-arg>
<constructor-arg value="baoma" index="0"></constructor-arg>
<constructor-arg value="shanghai" index="1"></constructor-arg>
</bean>
工厂方法注入(没有用过)
bean配置
内部bean配置
- 不能被外部引用,只能在person内部使用
<bean id="person2" class="com.sunny.beans.reference.Person">
<property name="name" value="李四"></property>
<property name="age" value="25"></property>
<property name="car">
<bean id="car3" class="com.sunny.beans.di.Car">
<constructor-arg value="250" name="maxSpeed" type="int" index="2"></constructor-arg>
<constructor-arg value="mazida" name="brand" index="0"></constructor-arg>
<constructor-arg value="shanghai" name="corp" index="1"></constructor-arg>
</bean>
</property>
</bean>
null值设置
- 使用
<null/>
标签
<bean id="person3" class="com.sunny.beans.reference.Person">
<constructor-arg name="name" value="王五"/>
<constructor-arg name="age" value="25"/>
<constructor-arg name="car">
<null/>
</constructor-arg>
</bean>
给级联属性赋值
- 属性(car)需要初始化后才可以级联赋值
<bean id="person4" class="com.sunny.beans.reference.Person">
<constructor-arg name="name" value="王五"/>
<constructor-arg name="age" value="25"/>
<constructor-arg name="car" ref="car"/>
<!--使用级联修改小车的最大速度为100-->
<property name="car.maxSpeed" value="100"></property>
</bean>
配置集合属性
- spring 提供了xml标签(
<list>
、<set>
、<map>
)为集合赋值 - 在集合标签可以通过
<value>
指定简单的常量值,<ref>
指定bean的引用,<bean>
内部bean定义
<bean id="conllectionsPerson" class="com.sunny.beans.conllections.Person">
<property name="name" value="钻石王老五"/>
<property name="age" value="50"/>
<property name="cars">
<list>
<ref bean="car"/>
<ref bean="car2"/>
<!--<value type="com.sunny.beans.HelloWorld">sdfsd</value>-->
<bean class="com.sunny.beans.di.Car">
<constructor-arg value="250" name="maxSpeed" type="int" index="2"></constructor-arg>
<constructor-arg value="mazida" name="brand" index="0"></constructor-arg>
<constructor-arg value="shanghai" name="corp" index="1"></constructor-arg>
</bean>
</list>
</property>
</bean>
配置map属性
- 通过
<entry>
标签的 key 和value-ref 绑定值
<bean id="mapPerson" class="com.sunny.beans.conllections.MapPerson">
<property name="name" value="老王"/>
<property name="age" value="30"/>
<property name="cars">
<map>
<entry key="AA" value-ref="car"></entry>
<entry key="BB" value-ref="car2"></entry>
</map>
</property>
</bean>
配置 properties 属性值
- 通过
<entry>
标签的 key 和value-ref 绑定值
<bean id="dataSource" class="com.sunny.beans.properties.DataSource">
<property name="properties">
<props>
<prop key="user">root</prop>
<prop key="password">123456</prop>
<prop key="jdbcUrl">jdbc:mysql....</prop>
<prop key="driverClass">com.mysql.jdbc.Driver</prop>
</props>
</property>
</bean>
配置单独的bean,提供多个bean引入
- 使用<util:list>标签定义一个公用bean
<util:list id="commonCars">
<ref bean="car"/>
<ref bean="car2"/>
</util:list>
<!--引入公用的bean-->
<bean id="person5" class="com.sunny.beans.conllections.Person">
<property name="name" value="引入公用的bean"/>
<property name="age" value="30"/>
<property name="cars" ref="commonCars"/>
</bean>
通过p命名空间为bean属性赋值
<bean id="person6" class="com.sunny.beans.reference.Person" p:age="20" p:name="通过p给bean属性赋值" p:car-ref="car"></bean>
我的微信号可以一起学习、讨论、纠错如果有写的不对的地方请指出
网友评论