JAVAssist---动态修改注解
/** * EntityManager的实例化 * @author 陈丽娜 * @version 1.0.0 , 2015年3月30日 下午8:43:27 * @param <T> */ public class CollectionBase<T> extends BaseEaoImpl<T> { /** * 注入实体单元 */ @PersistenceContext(unitName="collection-entity") protected EntityManager em; /**EntityManger * 实例化 */ @Override protected EntityManager getEntityManager() { return this.em; } }
首先来看是如何获得这个注解的:
@Test public void ReadTest() throws NotFoundException{ ClassPool pool = ClassPool.getDefault(); //获取要修改的类的所有信息 CtClass ct = pool.get("com.tgb.itoo.collection.base.CollectionBase"); //获取类中的方法 CtMethod[] cms = ct.getDeclaredMethods(); //获取第一个方法(因为只有一个方法) CtMethod cm = cms[0]; System.out.println("方法名称====" + cm.getName()); //获取方法信息 MethodInfo methodInfo = cm.getMethodInfo(); //获取类里的em属性 CtField cf = ct.getField("em"); //获取属性信息 FieldInfo fieldInfo = cf.getFieldInfo(); System.out.println("属性名称===" + cf.getName()); //获取注解属性 AnnotationsAttribute attribute = (AnnotationsAttribute) fieldInfo.getAttribute(AnnotationsAttribute.visibleTag); System.out.println(attribute); //获取注解 Annotation annotation = attribute.getAnnotation("javax.persistence.PersistenceContext"); System.out.println(annotation); //获取注解的值 String text =((StringMemberValue) annotation.getMemberValue("unitName")).getValue() ; System.out.println("注解名称===" + text); }
方法名称====getEntityManager 属性名称===em @javax.persistence.PersistenceContext(unitName="collection-entity") @javax.persistence.PersistenceContext(unitName="collection-entity") 注解名称===collection-entity
@Test public void UpdateTest() throws NotFoundException{ ClassPool pool = ClassPool.getDefault(); //获取需要修改的类 CtClass ct = pool.get("com.tgb.itoo.collection.base.CollectionBase"); //获取类里的所有方法 CtMethod[] cms = ct.getDeclaredMethods(); CtMethod cm = cms[0]; System.out.println("方法名称====" + cm.getName()); MethodInfo minInfo = cm.getMethodInfo(); //获取类里的em属性 CtField cf = ct.getField("em"); FieldInfo fieldInfo = cf.getFieldInfo(); System.out.println("属性名称===" + cf.getName()); ConstPool cp = fieldInfo.getConstPool(); //获取注解信息 AnnotationsAttribute attribute2 = new AnnotationsAttribute(cp, AnnotationsAttribute.visibleTag); Annotation annotation = new Annotation("javax.persistence.PersistenceContext", cp); //修改名称为unitName的注解 annotation.addMemberValue("unitName", new StringMemberValue("basic-entity", cp)); attribute2.setAnnotation(annotation); minInfo.addAttribute(attribute2); //打印修改后方法 Annotation annotation2 = attribute2.getAnnotation("javax.persistence.PersistenceContext"); String text = ((StringMemberValue)annotation2.getMemberValue("unitName")).getValue(); System.out.println("修改后的注解名称===" + text); }
方法名称====getEntityManager 属性名称===em 修改后的注解名称===basic-entity
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。