由于反射无法反射抽象类和接口;所以在这个时候使用工厂模式
静态的补充: 静态的方法可以通过类名 . 方法可以进行直接调用
抽象工厂
创建一个普通类, 在类里创建一个 静态的方法 ,
package com.jt.factory;
import java.util.Calendar;
public class StaticFactory {
/*通过静态工厂获取数据*/
public static Calendar getCalendar(){
/*
Calendar calendar = Calendar.getInstance();
return calendar;
*/
return Calendar.getInstance();
}
}
然后在application.xml中使用bean标签;
factory-method 的值是静态方法名
程序执行的原理 : 首先在测试类中创建容器(启动容器) ;然后会加载application.xml的文件;
然后在执行该文件的bean 在找到里面的class ;因为此时是静态(static) ; 再根据类名.方法 ; 找到里面的方法
factory-method 去找到那个方法 然后在进行保存
实例化工厂
创建一个普通类, 在类里创建一个有返回值 的方法 ,
package com.jt.factory;
import java.util.Calendar;
public class InstanceFactory {
//获取Calendar对象
public Calendar getCalendar(){
return Calendar.getInstance();
}
}
然后在application.xml中使用bean标签;
在此时先将对象交给spring工厂管理 然后在通过对象调用方法
程序执行的原理 : 首先在测试类中创建容器(启动容器) ;然后会加载application.xml的文件 ;
<!--2.实例化工厂 步骤1:将工厂交给spring容器管理 步骤2: 通过对象调用方法
对象.方法()
-->
<bean id="instanceFactory" class="com.jt.factory.InstanceFactory"></bean>
<bean id="calendar2" factory-bean="instanceFactory" factory-method="getCalendar"></bean>
然后,在将对象交给容器管理 ,在进行保存; 在通过调用容器里的对象进行引用,在调用里面的 方法;然后,将结果再进行保存;
spring工厂
代替了静态工厂和实例化工厂
在一些复杂的对象(容器)不能够直接实例化的对象首选spring工厂;
创建一个普通类, 这个类并实现FactoryBean
在application文件中配置文件; 此时的id的值为实例化后的对象的名字
实现spring容器的接口的过程
钩子函数 : 就是在实现接口的时候, 那么该接口在去调用该接口里面的方法,方法执行完之后 ;如果有其他接口,那么在回去调用其他接口里面的方法 ;