一.构造器实例化(无参数构造器),最标准,使用最多
javaBean中必须有无参构造方法
<!-- 1.使用无参数构造器(最多,最常见) -->
<bean id="someBean1" class="cn.zj.spring.bean.SomeBean1"/>
<!--
底层原理
Class<SomeBean1> clz = Class.forName("cn.zj.spring.bean.SomeBean1")
SomeBean1 bean1 = clz.newInstance();
-->
二.通过静态方法工厂创建
<!-- 2.通过静态方法工厂创建 -->
<bean id="someBean2" class="cn.zj.spring.bean.SomeBean2Factory" factory-method="getBean2"/>
/*
*
* 静态工厂类
*
* 提供一个 【静态】方法返回SomeBean2对象
*
*
*
*/
public class SomeBean2Factory {
public static SomeBean2 getBean2() {
SomeBean2 someBean2 = new SomeBean2();
return someBean2;
}
}
三.通过实体工厂创建
<!-- 3.通过实体(对象)工厂方法创建 -->
<!-- 3.1创建工厂对象 -->
<bean id="someBean3Factory" class="cn.zj.spring.bean.SomeBean3Factory"/>
<!-- 3.2通过工厂对象创建SomeBean3
factory-bean :工厂bean
-->
<bean id="someBean3" factory-bean="someBean3Factory" factory-method="getBean3"/>
/*
* 对象工厂类
*
* 提供一个 【对象】方法返回SomeBean3
*
*/
public class SomeBean3Factory{
public SomeBean3 getBean3() {
SomeBean3 bean3 = new SomeBean3();
return bean3;
}
}
四.实现FactoryBean接口实例化
<!-- 4.实现Spring内置的FactoryBean接口 -->
<bean id="someBean4" class="cn.zj.spring.bean.SomeBean4Factory"/>
/*
*
* 实现 implements FactoryBean<T>
* T :泛型,就是当前要创建Bean对应的类型:SomeBean4
*
* 实现接口的方法
* getObject 返回T泛型对应的数据类型
* isSingleton 是否是单例设置
* getObjectType 返回bean数据类型
*
* 所有的框架可Spring集成都是使用此种方式:Spring对外暴露的一个和Spring集成的接口
* Mybatis,Shiro,Hibernate,Struts2
*/
public class SomeBean4Factory implements FactoryBean<SomeBean4>{
@Override
public SomeBean4 getObject() throws Exception {
System.out.println("------------------------");
SomeBean4 bean4 = new SomeBean4();
return bean4;
}
@Override
public Class<?> getObjectType() {
return null;
}
@Override
public boolean isSingleton() {
return true;
}
}