利用java中spring框架IOC模块中的factoryBean来创建工厂对象的一种模式
意义:工厂模式是由抽象工厂(FactoryBean)的实现来创建子工厂来管理资源,实现了节省工厂资源以及引入其他的新技术及资源
代码实现步骤:
1.创建一个工厂类对象
public class ObjectFactory;
2:factoryBean实现FactoryBean借口返回类型为ObjecFactory
package com.jt.spring.bean;
import org.springframework.beans.factory.FactoryBean;
public class ObjectFactoryBean implements FactoryBean<ObjectFactory> {
@Override
public ObjectFactory getObject() throws Exception {
System.out.println("ObjectFactoryBean.getObject()");
return new ObjectFactory();
}
public Class<?> getObjectType() {
System.out.println("ObjectFactoryBean.getObjectType()");
return ObjectFactory.class;
}
public boolean isSingleton() {
System.out.println("ObjectFactoryBean.isSingleton()");
return false;
}
}
3:测试对象是否创建springCfing.xml为核心配置文件
@Test
public void testObjectFactory(){
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("springCfing.xml");
ObjectFactory obj=
context.getBean("objectFactory", ObjectFactory.class);
System.out.println(obj);
context.close();
}
package com.jt.common.mapper;
import java.util.List;
import org.apache.ibatis.annotations.DeleteProvider;import org.apache.ibatis.annotations.InsertProvider;import org.apache.ibatis.annotations.Param;import org.apache.ibatis.annotations.SelectProvider;import org.apache.ibatis.annotations.UpdateProvider;
public interface SysMapper<T> {
/** * 根据主键ID批量删除 * * @param key * @return */ @DeleteProvider(type = SysMapperProvider.class, method = "dynamicSQL") int deleteByIDS(@Param("ids") Object[] key);
/** * 根据实体类不为null的字段进行查询,条件全部使用=号and条件 * * @param record * @return */ @SelectProvider(type = SysMapperProvider.class, method = "dynamicSQL") List<T> select(T record);
/** * 根据实体类不为null的字段查询总数,条件全部使用=号and条件 * * @param record * @return */ @SelectProvider(type = SysMapperProvider.class, method = "dynamicSQL") int selectCount(T record);
/** * 根据主键进行查询,必须保证结果唯一 单个字段做主键时,可以直接写主键的值 联合主键时,key可以是实体类,也可以是Map * * @param key * @return */ @SelectProvider(type = SysMapperProvider.class, method = "dynamicSQL") T selectByPrimaryKey(Object key);
/** * 插入一条数据 支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写) 优先使用传入的参数值,参数值空时,才会使用序列、UUID,自动增长 * * @param record * @return */ @InsertProvider(type = SysMapperProvider.class, method = "dynamicSQL") int insert(T record);
/** * 插入一条数据,只插入不为null的字段,不会影响有默认值的字段 支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写) * 优先使用传入的参数值,参数值空时,才会使用序列、UUID,自动增长 * * @param record * @return */ @InsertProvider(type = SysMapperProvider.class, method = "dynamicSQL") int insertSelective(T record);
/** * 根据实体类中字段不为null的条件进行删除,条件全部使用=号and条件 * * @param key * @return */ @DeleteProvider(type = SysMapperProvider.class, method = "dynamicSQL") int delete(T key);
/** * 通过主键进行删除,这里最多只会删除一条数据 单个字段做主键时,可以直接写主键的值 联合主键时,key可以是实体类,也可以是Map * * @param key * @return */ @DeleteProvider(type = SysMapperProvider.class, method = "dynamicSQL") int deleteByPrimaryKey(Object key);
/** * 根据主键进行更新,这里最多只会更新一条数据 参数为实体类 * * @param record * @return */ @UpdateProvider(type = SysMapperProvider.class, method = "dynamicSQL") int updateByPrimaryKey(T record);
/** * 根据主键进行更新 只会更新不是null的数据 * * @param record * @return */ @UpdateProvider(type = SysMapperProvider.class, method = "dynamicSQL") int updateByPrimaryKeySelective(T record);
}