隨筆-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 華夢行 閱讀(662) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 叙永县| 临西县| 壤塘县| 库伦旗| 肇源县| 曲靖市| 九龙城区| 富阳市| 长丰县| 宜春市| 大连市| 和平区| 同心县| 罗江县| 九江市| 太湖县| 陕西省| 安庆市| 旬邑县| 巴林右旗| 亚东县| 山阴县| 辰溪县| 永靖县| 额尔古纳市| 藁城市| 甘南县| 龙口市| 武胜县| 江孜县| 娄烦县| 包头市| 鄂托克前旗| 电白县| 海南省| 白朗县| 成都市| 靖江市| 辛集市| 德钦县| 三亚市|