定义一个FactoryBean实现类APIFactoryBean用于父类:
<bean id="apiFactoryBean" abstract="true" class="com.common.bean.APIFactoryBean" />
主要成员变量及方法如下:
public class APIFactoryBean implements FactoryBean, InitializingBean, ApplicationContextAware {
private ApplicationContext springContext;
@Resource(name = "baseDao")
private BaseDao baseDao;
private Class<?> target; // interface class
@Override
public Object getObject() throws Exception {
try {
Class<?> clazz = JavassistIbatisHelper.generate(this.target, this.springContext);
Constructor<?>[] constructors = clazz.getConstructors();
Constructor<?> constructor = null;
for (int i = 0; i < constructors.length; i++) {
if (constructors[i].getParameterTypes().length == 2) {
constructor = constructors[i];
return constructor.newInstance(this.baseDao, this.springContext);
}
}
throw new JavassitBuildBeanException(Errors.UNKOWN.getCode(), target.getCanonicalName()
+ "APIFactoryBean Exception ");
} catch (Throwable e) {
logger.error(e.getMessage(), e);
throw new JavassitBuildBeanException(Errors.UNKOWN.getCode(), target.getCanonicalName()
+ " APIFactoryBean Throwable ", e);
}
}
...
}
其中:JavassistIbatisHelper的generate方法利用 javaassist根据传入的类名(即target参数)及一些其他的参数(通过annotation定义)动态的生成需要构造的类。
定义一个需要实现JavassitTest1API接口的类:
<bean id="javassitTest1API" parent="apiFactoryBean">
<property name="target" value="com.api.JavassitTest1API"/>
</bean>
JavassitTest1API接口定义如下:
public interface JavassitTest1API {
@Sql(value = "sample.loadTest1")
public ResultGeneralModel<Test1> loadTest1ById(@SqlParam(name = "id") String id);
}
类似的可以通过继承APIFactoryBean实现构造多个类:
如:
<bean id="javassitTest2API" parent="apiFactoryBean">
<property name="target" value="com.api.JavassitTest2API"/>
</bean>
JavassitTest2API接口定义如下:
public interface JavassitTest2API {
@Sql(value = "sample.loadTest2")
public ResultGeneralModel<Test2> loadTest2ById(@SqlParam(name = "id") String id);
}
分享到:
相关推荐
csh框架+cxf+spring+hibernate+mysql 注解 annotation xml json, 参考了菠萝大象的文章,感谢。
jquery easyUI+struts2+spring+hibernate基于annotation实现的CRM
Spring Boot+Redis+拦截器+自定义Annotation如何实现接口自动幂等.docx
JSF+Spring+Hibernate(Annotation)的login小实例,建议入门的朋友看看,老鸟就免了,呵呵。环境:SQLSever2000+jdk5.0+spring2.0+hibernate3.2+jsf
GSH:spring3.1.0M2+Hibernate3.5+GWT2.4+JPA+Annotation+Spring4gwt0.0.1亲手整合,也可以上新浪博客去看 http://blog.sina.com.cn/s/blog_687dfecb0100yrmf.html
rest(jersey)+hibernate+spring+annotation android开发服务器端
Dwr3+Spring3 全注解 annotation 方式实现
Struts2+Spring2+Hibernate3+Annotation所需JAR包
Spring mvc Aop+annotation实现系统日志记录功能实现的jar包asm-3.3.jar ,aspectjrt.jar , aspectjweaver.jar , cglib-nodep-2.1_3.jar , spring-aop.jar
基于Struts2.18+Spring2.5+Hibernater3.3+Annotation注解开发的电子商务网站demo
struts2+spring2+hibernate3 Annotation整合例子
NULL 博文链接:https://huihai.iteye.com/blog/860633
我自己搭建的spring4+springMVC4+hibernate4.3.8基于annotation的开发环境 中间遇到好多问题,比如jar包不齐什么的,我把所有的包放在lib目录下,大家不用再去下载了
struts2+spring2.5+hibernate3.2 annotation配置完整eclipse项目,带数据库脚本
struts2+spring+hibernate(实现XML和Annotation两种方式操作数据库) 项目描述: 框架及版本:struts2 + spring3.0 + hibernate3.3 所实现的功能说明 把两个对象存入到数据库中 1、一种方法采用XML文件映射的方式 2...
Spring annotation 样例
Struts1.3 + Hibernate3.3 + Spring3.0 Annotation整合
Spring Annotation
Java+Annotation入门[定义].pdf