● bean的配置方式? ○ xml文件配置 ○ bean的配置范围(scope范围) ○ bean的延迟加载(applicationContext是立即加载,如果需要延迟加载设置lazy-init为true,在getBean的时候才进行加载,加载实例化完了之后回存储到单例池中去,后续使用该bean直接从单例池中获取即可,本质上该bean还是单例的) ○ bean的初始化方法和销毁方法怎么指定?这里的destoryMethod的bean的销毁和容器的销毁并不是一回事,有时候对象不执行销毁方法可能是spring的容器先挂了,这时候来不及执行destory方法。 ● 关于对象创建完毕之后想要做一些初始化工作,可以有两个方法:一个是可以写个方法,在bean的配置时候指定该方法为initMethod是谁;第二个就是这个实例implements接口InitializingBean去复写里面的afterPropertiesSet�来进行初始化逻辑 ● bean的实例化是怎么做的?一种是通过构造方式(构造方法对bean实例化),一种是工厂方式(通过自定义的工厂对bean进行实例化) ○ 无参构造 ○ 有参构造 ○ 注意这里要是只有有参构造没有无参构造,会有问题解决的方法可以是在配置类里面加上constructor-arg�参数 ● 工厂方式实例化bean是怎么做的? ○ 静态工厂的静态方法的方式进行实例化bean ■ 配置内容如下:这里面的factory-method就相当于是指定“userDao”这个方法,把这个方法的返回值作为value对象,再以指定的beanId作为beanName作为对象key存储到map中 <bean id="userDao1" class="com.autonavi.xmap.springLearning.factory.MyBeanFactory1" factory-method="userDao"></bean> 伪代码
public class MyBeanFactory1 {
public static UserDao userDao(){
// bean创建之前可以进行一些其他业务逻辑操作
return new UserDaoImpl();
}
}
○ 实例工厂内部的方法是非静态的,用这个方法来实例化bean ■ 配置内容如下: <!--配置工厂对象-->
<bean id="myBeanFactory2" class="com.autonavi.xmap.springLearning.factory.MyBeanFactory2" ></bean>
<bean id="userDao2" factory-bean="myBeanFactory2" factory-method="userDao"></bean>
○ 实现FactoryBean规范延迟实例化bean(它不是马上创建,在用的时候才创建)看下FactoryBean里面就能看到实际上工作的只有3个方法:getObject返回对象、getObjectType返回类型、isSingleton是否单例
● bean的注入方式 ○ 通过set方法进行注入 ■ 注入的是普通属性:用value就行(string、int) ■ 注入的是对象引用:通过ref进行注入(Reference) ○ 通过构造Bean的方法进行注入 ■ 普通属性 ■ 对象引用 ● bean依赖注入的数据类型 ○ 普通数据类型:string、int、boolean等,通过value属性指定 ○ 引用数据类型(容器中1个bean注入另外1个bean):UserDaoImpl、DataSource等,通过ref属性指定 ○ 集合数据类型:List、Map、Properties等 ○ 举一些例子
<bean id="userService" class="com.autonavi.xmap.springLearning.service.impl.UserServiceImpl">
<property name="stringList">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
<property name="userDaoList">
<list>
<bean class="com.autonavi.xmap.springLearning.dao.UserDaoImpl"></bean>
<bean class="com.autonavi.xmap.springLearning.dao.UserDaoImpl"></bean>
<bean class="com.autonavi.xmap.springLearning.dao.UserDaoImpl"></bean>
</list>
</property>
<property name="userDaoList">
<list>
<ref bean="userDao1"></ref>
<ref bean="userDao2"></ref>
<ref bean="userDao3"></ref>
</list>
</property>
<property name="stringSet">
<set>
<value>xxx</value>
<value>yyy</value>
<value>zzz</value>
</set>
</property>
<property name="userDaoSet">
<set>
<ref bean="userDao1"></ref>
<ref bean="userDao2"></ref>
<ref bean="userDao3"></ref>
</set>
</property>
<property name="map">
<map>
<entry key="keyTest1" value-ref="userDao1">
</entry>
<entry key="keyTest2" value-ref="userDao2">
</entry>
</map>
</property>
<property name="properties">
<props>
<prop key="p1"> ppp1 </prop>
<prop key="p2"> ppp2 </prop>
</props>
</property>
</bean>
<bean id="userDao1" class="com.autonavi.xmap.springLearning.dao.UserDaoImpl"></bean>
<bean id="userDao2" class="com.autonavi.xmap.springLearning.dao.UserDaoImpl"></bean>
<bean id="userDao3" class="com.autonavi.xmap.springLearning.dao.UserDaoImpl"></bean>
● bean的自动装配 ○ byName(byname的注意点就是name要对上,并且name不要重复) ○ byType(byType的注意点就是根据type要只能找到一个,不能有多个(唯一匹配性问题),否则爆出有NoUniqueBeanDefinitionException异常,会提示expected single matching bean but found 2: userDao,userDao2 ● bean的其他配置标签 ○ spring的xml标签大体上分为两类,一种是默认标签,一种是自定义标签 ■ 默认标签:就是不用额外导入其他命名空间约束的标签,例如<bean>标签,总共4个默认标签; ● beans:profile进行属性区分 ■ 自定义标签:就是需要额外引入其他命名空间约束,并通过前缀引用的标签,例如 context:property-placeholder/ 这样的标签
●
标签:初始化,标签,springframework,bean,实例,加载,方法,注入 From: https://blog.51cto.com/u_15927490/7530032