隨筆-295  評論-26  文章-1  trackbacks-0

          AnnotationProcessor ???? Annotation 處理的接口,實現類是DefaltAnnotationProcessor?:

          protected static?void lookupFieldResource (javax.naming.Context?context, java.lang.Object?instance, java.lang.reflect.Field?field, java.lang.String?name)
          ??????????Inject resources in specified field.
          protected static?void lookupMethodResource (javax.naming.Context?context, java.lang.Object?instance, java.lang.reflect.Method?method, java.lang.String?name)
          ??????????Inject resources in specified method.
          ?void postConstruct (java.lang.Object?instance)
          ??????????Call postConstruct method on the specified instance.
          ?void preDestroy (java.lang.Object?instance)
          ??????????Call preDestroy method on the specified instance.
          ?void processAnnotations (java.lang.Object?instance)
          ??????????Inject resources in specified instance


          public class DefaultAnnotationProcessor implements AnnotationProcessor {
          ???
          ??? protected javax.naming.Context context = null;
          ???
          ??? public DefaultAnnotationProcessor(javax.naming.Context context) {
          ??????? this.context = context;
          ??? }


          ??? /**
          ???? * Call postConstruct method on the specified instance.
          ???? */
          ??? public void postConstruct(Object instance)
          ??????? throws IllegalAccessException, InvocationTargetException {
          ???????
          ??????? Method[] methods = instance.getClass().getDeclaredMethods();
          ??????? Method postConstruct = null;
          ??????? for (int i = 0; i < methods.length; i++) {
          ??????????? if (methods[i].isAnnotationPresent(PostConstruct.class)) {
          ??????????????? if ((postConstruct != null)
          ??????????????????????? || (methods[i].getParameterTypes().length != 0)
          ??????????????????????? || (Modifier.isStatic(methods[i].getModifiers()))
          ??????????????????????? || (methods[i].getExceptionTypes().length > 0)
          ??????????????????????? || (!methods[i].getReturnType().getName().equals("void"))) {
          ??????????????????? throw new IllegalArgumentException("Invalid PostConstruct annotation");
          ??????????????? }
          ??????????????? postConstruct = methods[i];
          ??????????? }
          ??????? }

          ??????? // At the end the postconstruct annotated
          ??????? // method is invoked
          ??????? if (postConstruct != null) {
          ??????????? boolean accessibility = postConstruct.isAccessible();
          ??????????? postConstruct.setAccessible(true);
          ??????????? postConstruct.invoke(instance);
          ??????????? postConstruct.setAccessible(accessibility);
          ??????? }
          ???????
          ??? }
          ???
          ???
          ??? /**
          ???? * Call preDestroy method on the specified instance.
          ???? */
          ??? public void preDestroy(Object instance)
          ??????? throws IllegalAccessException, InvocationTargetException {
          ???????
          ??????? Method[] methods = instance.getClass().getDeclaredMethods();
          ??????? Method preDestroy = null;
          ??????? for (int i = 0; i < methods.length; i++) {
          ??????????? if (methods[i].isAnnotationPresent(PreDestroy.class)) {
          ??????????????? if ((preDestroy != null)
          ??????????????????????? || (methods[i].getParameterTypes().length != 0)
          ??????????????????????? || (Modifier.isStatic(methods[i].getModifiers()))
          ??????????????????????? || (methods[i].getExceptionTypes().length > 0)
          ??????????????????????? || (!methods[i].getReturnType().getName().equals("void"))) {
          ??????????????????? throw new IllegalArgumentException("Invalid PreDestroy annotation");
          ??????????????? }
          ??????????????? preDestroy = methods[i];
          ??????????? }
          ??????? }

          ??????? // At the end the postconstruct annotated
          ??????? // method is invoked
          ??????? if (preDestroy != null) {
          ??????????? boolean accessibility = preDestroy.isAccessible();
          ??????????? preDestroy.setAccessible(true);
          ??????????? preDestroy.invoke(instance);
          ??????????? preDestroy.setAccessible(accessibility);
          ??????? }
          ???????
          ??? }
          ???
          ???
          ??? /**
          ???? * Inject resources in specified instance.
          ???? */
          ??? public void processAnnotations(Object instance)
          ??????? throws IllegalAccessException, InvocationTargetException, NamingException {
          ???????
          ??????? if (context == null) {
          ??????????? // No resource injection
          ??????????? return;
          ??????? }
          ???????
          ??????? // Initialize fields annotations
          ??????? Field[] fields = instance.getClass().getDeclaredFields();
          ??????? for (int i = 0; i < fields.length; i++) {
          ??????????? if (fields[i].isAnnotationPresent(Resource.class)) {
          ??????????????? Resource annotation = (Resource) fields[i].getAnnotation(Resource.class);
          ??????????????? lookupFieldResource(context, instance, fields[i], annotation.name());
          ??????????? }
          ??????????? if (fields[i].isAnnotationPresent(EJB.class)) {
          ??????????????? EJB annotation = (EJB) fields[i].getAnnotation(EJB.class);
          ??????????????? lookupFieldResource(context, instance, fields[i], annotation.name());
          ??????????? }
          ??????????? if (fields[i].isAnnotationPresent(WebServiceRef.class)) {
          ??????????????? WebServiceRef annotation =
          ??????????????????? (WebServiceRef) fields[i].getAnnotation(WebServiceRef.class);
          ??????????????? lookupFieldResource(context, instance, fields[i], annotation.name());
          ??????????? }
          ??????????? if (fields[i].isAnnotationPresent(PersistenceContext.class)) {
          ??????????????? PersistenceContext annotation =
          ??????????????????? (PersistenceContext) fields[i].getAnnotation(PersistenceContext.class);
          ??????????????? lookupFieldResource(context, instance, fields[i], annotation.name());
          ??????????? }
          ??????????? if (fields[i].isAnnotationPresent(PersistenceUnit.class)) {
          ??????????????? PersistenceUnit annotation =
          ??????????????????? (PersistenceUnit) fields[i].getAnnotation(PersistenceUnit.class);
          ??????????????? lookupFieldResource(context, instance, fields[i], annotation.name());
          ??????????? }
          ??????? }
          ???????
          ??????? // Initialize methods annotations
          ??????? Method[] methods = instance.getClass().getDeclaredMethods();
          ??????? for (int i = 0; i < methods.length; i++) {
          ??????????? if (methods[i].isAnnotationPresent(Resource.class)) {
          ??????????????? Resource annotation = (Resource) methods[i].getAnnotation(Resource.class);
          ??????????????? lookupMethodResource(context, instance, methods[i], annotation.name());
          ??????????? }
          ??????????? if (methods[i].isAnnotationPresent(EJB.class)) {
          ??????????????? EJB annotation = (EJB) methods[i].getAnnotation(EJB.class);
          ??????????????? lookupMethodResource(context, instance, methods[i], annotation.name());
          ??????????? }
          ??????????? if (methods[i].isAnnotationPresent(WebServiceRef.class)) {
          ??????????????? WebServiceRef annotation =
          ??????????????????? (WebServiceRef) methods[i].getAnnotation(WebServiceRef.class);
          ??????????????? lookupMethodResource(context, instance, methods[i], annotation.name());
          ??????????? }
          ??????????? if (methods[i].isAnnotationPresent(PersistenceContext.class)) {
          ??????????????? PersistenceContext annotation =
          ??????????????????? (PersistenceContext) methods[i].getAnnotation(PersistenceContext.class);
          ??????????????? lookupMethodResource(context, instance, methods[i], annotation.name());
          ??????????? }
          ??????????? if (methods[i].isAnnotationPresent(PersistenceUnit.class)) {
          ??????????????? PersistenceUnit annotation =
          ??????????????????? (PersistenceUnit) methods[i].getAnnotation(PersistenceUnit.class);
          ??????????????? lookupMethodResource(context, instance, methods[i], annotation.name());
          ??????????? }
          ??????? }

          ??? }
          ???
          ???
          ??? /**
          ???? * Inject resources in specified field.
          ???? */
          ??? protected static void lookupFieldResource(javax.naming.Context context,
          ??????????? Object instance, Field field, String name)
          ??????? throws NamingException, IllegalAccessException {
          ???
          ??????? Object lookedupResource = null;
          ??????? boolean accessibility = false;
          ???????
          ??????? if ((name != null) &&
          ??????????????? (name.length() > 0)) {
          ??????????? lookedupResource = context.lookup(name);
          ??????? } else {
          ??????????? lookedupResource = context.lookup(instance.getClass().getName() + "/" + field.getName());
          ??????? }
          ???????
          ??????? accessibility = field.isAccessible();
          ??????? field.setAccessible(true);
          ??????? field.set(instance, lookedupResource);
          ??????? field.setAccessible(accessibility);
          ??? }


          ??? /**
          ???? * Inject resources in specified method.
          ???? */
          ??? protected static void lookupMethodResource(javax.naming.Context context,
          ??????????? Object instance, Method method, String name)
          ??????? throws NamingException, IllegalAccessException, InvocationTargetException {
          ???????
          ??????? if (!method.getName().startsWith("set")
          ??????????????? || method.getParameterTypes().length != 1
          ??????????????? || !method.getReturnType().getName().equals("void")) {
          ??????????? throw new IllegalArgumentException("Invalid method resource injection annotation");
          ??????? }
          ???????
          ??????? Object lookedupResource = null;
          ??????? boolean accessibility = false;
          ???????
          ??????? if ((name != null) &&
          ??????????????? (name.length() > 0)) {
          ??????????? lookedupResource = context.lookup(name);
          ??????? } else {
          ??????????? lookedupResource =
          ??????????????? context.lookup(instance.getClass().getName() + "/" + method.getName().substring(3));
          ??????? }
          ???????
          ??????? accessibility = method.isAccessible();
          ??????? method.setAccessible(true);
          ??????? method.invoke(instance, lookedupResource);
          ??????? method.setAccessible(accessibility);
          ??? }
          ???

          }



          大盤預測 國富論
          posted on 2007-06-28 15:26 華夢行 閱讀(666) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 新昌县| 棋牌| 疏附县| 广昌县| 建始县| 乌兰察布市| 抚远县| 淅川县| 汉中市| 铜陵市| 资溪县| 南城县| 来安县| 锡林郭勒盟| 陆丰市| 南陵县| 长岭县| 天气| 亚东县| 兴安县| 安吉县| 布尔津县| 新乐市| 江永县| 东乌珠穆沁旗| 武山县| 长白| 鹤峰县| 青铜峡市| 湘潭市| 永登县| 天台县| 新宁县| 汉中市| 台中县| 海林市| 分宜县| 昆山市| 徐汇区| 苍南县| 武安市|