spring框架绝大部分工作都集中在对容器Bean的管理上,包括管理容器中Bean的生命周期,使用Bean继承等特殊功能。通过这些深入的管理,应用程序可以更好迪使用这些Java组件(容器中的Bean对应用而言,往往是一个组件)
1.1使用抽象Bean
<bean id="chineseTemplate" class="org.crazyit.app.service.impl.Chinese"
abstract="true">
<!-- 定义依赖注入的属性-->
<property name="axe" ref="steelAxe"/>
</bean>
抽象Bean因为无需实例化,所以也可以将class属性去掉
1.2使用子Bean
<bean id="chineseTemplate" class="org.crazyit.app.service.impl.Chinese"
abstract="true">
<!-- 定义依赖注入的属性-->
<property name="axe" ref="steelAxe"/>
</bean>
<!-- 通过parent属性定义子bean -->
<bean id="chinese" parent="chineseTemplate"/>
1.3 Bean继承与java继承的区别
Java中的继承是实例与实例之间的参数的延续,是对象与对象之间的关系。Spring则是一般到特殊的细化,是类与类之间的关系
1.4容器中的工厂Bean
标准工厂,该工厂Bean实现了FactoryBean接口
package com.jtwl.office.factory;
import org.springframework.beans.factory.FactoryBean;
import com.jtwl.office.service.Person;
import com.jtwl.office.service.Person1;
import com.jtwl.office.service.imp.Chinese1;
/**
* @todo
* @author 成明俊
* @email 1047914020@qq.com
* @date 2020年3月2日
*/
public class PersonFactory1 implements FactoryBean<Person1>{
Person1 p = null;
//返回工厂Bean所生产的产品
public Person1 getObject() throws Exception {
if(p == null) {
p = new Chinese1();
}
return p;
}
//获取工厂Bean所生产的产品的类型
public Class<? extends Person1> getObjectType() {
return Chinese1.class;
}
//返回该工厂Bean所生成的产品是否为单例
public boolean isSingleton() {
return false;
}
}
配置文件
<!-- 配置一个FactoryBean,与配置普通Bean完全一样 -->
<bean id="chinese" class="com.jtwl.office.factory.PersonFactory1"/>
主程序
public class SpringTest {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
//直接请求Factory时,系统将返回FactoryBean的产品
Person1 p1 = ctx.getBean("chinese", Person1.class);
System.out.println(p1.sayHello("Mary"));
//再次获取该FactoryBean的产品
Person1 p2 = ctx.getBean("chinese", Person1.class);
System.out.println(p1 == p2);
//如需获取FactoryBean本身,则应该在Bean id前增加&
System.out.println(ctx.getBean("&chinese"));
}
}
运行结果
1.5 获得Bean本身的id
1.6 强制初始化bean