bean管理
创建对象
注入属性
基于xml进行bean管理
创建对象
<bean id="任意" class="A的类路径"></bean>
id 获取对象唯一标识
class 类的全路径
name 跟id作用几乎一样 但id不可以加特殊符号name可以
创建对象是默认执行无参构造
注入属性: DI 依赖注入 di是ioc的一种具体实现
1 set注入
2有参构造注入
在spring配置文件中 配置属性注入(set注入)
<bean id="任意" class="A的类路径">
<property name="aage" value="18"></property>//name 对应类里的属性名
</bean>
(有参构造注入)
<bean id="任意" class="A的类路径">
<constructor-arg name="aage" value="18"/>
<constructor-arg index="0" value="18"/> //有参构造的第一个参数
</bean>
p名称空间注入
xmlns:p=“…/p” xsi
<bean id="任意" class="A的类路径" p:aage="18">
</bean>
注入空值,属性值包含特殊符号
<property name="aage">
<null/>
</property>
//也可以转义
<property name="aage">
<value>
<![CDATA[内容]]>
</value>
</property>
外部bean
Adao AdaoImpl AService(含Adao及set方法)
service调用dao方法
<bean id="ADao" class="ADao对应实现类的类路径impl"></bean>
<bean id="AService" class="AService的类路径">
<property name="类里面的属性名称" ref="ADao"/>
</bean>
aaaa=context.getbean()得到AService对象
aaaa.asd(); asd是AService内一个调用Adao方法的方法
内部bean
<bean id="AService" class="AService的类路径">
<property name="类里面的属性名称" >
<bean id="adao" class="ADao对应实现类的类路径impl">
<property name="Aage" value="18"/>
</bean>
</property>
</bean>
级联赋值
1方法
<bean id="ADao" class="ADao对应实现类的类路径impl">
<property name="aage" value="18"/>
</bean>
<bean id="AService" class="AService的类路径">
<property name="类里面的属性名称" ref="ADao"/>
</bean>
2方法
<bean id="ADao" class="ADao对应实现类的类路径impl">
<property name="aage" value="18"/>
</bean>
<bean id="AService" class="AService的类路径">
<property name="类里面的属性名称" ref="ADao"/>
<property name="A.aage" value="19"/>
</bean>
xml注入集合属性
int b[];
//注入数组
<property name="b">
<array>
<value> 1 </value>
<value> 2 </value>
</array>
</property>
List<int> b;
//注入list
<property name="b">
<list>
<value> 1 </value>
<value> 2 </value>
</list>
</property>
Map<String,String> b;
//注入map
<property name="b">
<map>
<entry key="s" value="c" />
<entry key="d" value="e" />
</map>
</property>
Set<int> b;
//注入set
<property name="b">
<set>
<value> 1 </value>
<value> 2 </value>
</set>
</property>
List<Aobject> a;
<bean id="Aaobject" class="Aobject类路径">
<property name="a.age" value="18">
</bean>
<property name="b">
<list>
<ref="Aaobject">
</list>
</property>
//将Aaobject提取出来作为公共部分都能用
//util命名空间 xmlns:util="...." xsi
<util:list id="BList">
<value>18</value>
<value>19</value>
</util:list>
<bean id="b" class="..">
<property name="bage" ref="BList"/>
</bean>
工厂Bean
配置文件中定义的类型可以和返回值不一样
1创建类实现FactoryBean接口
2实现接口中的方法
class A implements FactoryBean<B>{
public B getObject()throws Exception{
return new B();
}
}
bean的作用域(单例/多实例)默认单例
bean属性scope,singleton 单例加载时创建,prototype多实例调用时创建
request,session这两个不常用放到不同区中
bean生命周期
1通过构造器创建bean对象(无参)
2设置bean中属性值(set)
2.5把bean实列传递给bean后置处理器的方法postProcessBeforeInitalization(实现BeanPostProcessor)
3调用bean的初始化方法(需要自己配置)bean里属性 init-method=“对应类里方法名”
3.5把bean实列传递给bean后置处理器的方法postProcessAfterInitalization
4得到了个可以使用的bean
5当容器关闭时销毁bean(需要自己配置)bean里属性 destroy-method=“对应类里方法名” (如果要手动销毁b.close 强转ClassPathXmlApplicationContext里的方法)
后置处理器单独类,单独bean配置会对当前配置文件中所有bean进行后置处理的操作
自动注入
bean属性 autowire=“byName” 根据名称自动注入(外部bean,id和我的类属性名要一样) autowire="byType"根据属性类型自动注入(要求每个类型只能有一个)
//省略了
<property name="" ref=""/>
外部属性文件
jdbc.properties
加context名称空间
<context:property-placeholder location="classpath:jdbc.properties"/>
value="${prop.url}"