Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2014-2015 the original author or authors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
  * either express or implied. See the License for the specific language
  * governing permissions and limitations under the License.
  */
 package org.lastaflute.di.core.customizer;
 
 import java.util.List;
 
コンポーネント定義をカスタマイズするコンポーネントカスタマイザの抽象クラスです。

カスタマイズ対象となるコンポーネントおよびカスタマイズ非対象のコンポーネントをクラスパターンで指定することができます。 指定できるクラスパターンの組み合わせは、 以下の通りです。

  • カスタマイズ対象・非対象のクラスパターン共に指定されなかった場合は、 全てのコンポーネントをカスタマイズ対象とします。
  • カスタマイズ対象のクラスパターンのみ指定された場合は、 カスタマイズ対象クラスパターンにマッチしたコンポーネントのみがカスタマイズの対象となります。
  • カスタマイズ非対象のクラスパターンのみ指定された場合は、 カスタマイズ非対象クラスパターンにマッチしなかったコンポーネントのみがカスタマイズの対象となります。
  • カスタマイズ対象と非対象のクラスパターンが共に指定された場合は、 カスタマイズ対象クラスパターンにマッチしてかつ、 カスタマイズ非対象のクラスパターンにマッチしなかったコンポーネントのみがカスタマイズの対象となります。

カスタマイズ対象のコンポーネントが実装していなくてはならないインターフェースを、 ターゲットインターフェースとしてtargetInterfaceプロパティで指定することもできます。 ターゲットインターフェースを指定した場合は、 そのインターフェースを実装したコンポーネントのみがカスタマイズの対象になります。

customize(org.lastaflute.di.core.ComponentDef)メソッドの引数で渡されたコンポーネントがカスタマイズ対象の場合は、 抽象メソッドdoCustomize(org.lastaflute.di.core.ComponentDef)を呼び出します。 サブクラスはdoCustomize(org.lastaflute.di.core.ComponentDef)メソッドを実装してコンポーネント定義をカスタマイズしてください。

Author(s):
modified by jflute (originated in Seasar)
 
 public abstract class AbstractCustomizer implements ComponentCustomizer {
 
     public static final String targetInterface_BINDING = "bindingType=may";
     protected final List<ClassPatternclassPatterns = new ArrayList<ClassPattern>();
     protected final List<ClassPatternignoreClassPatterns = new ArrayList<ClassPattern>();
     protected Class<?> targetInterface;
 
     public void addClassPattern(final String packageNamefinal String shortClassNames) {
         addClassPattern(new ClassPattern(packageNameshortClassNames));
     }
 
     public void addClassPattern(final ClassPattern classPattern) {
         .add(classPattern);
     }
 
     public void addIgnoreClassPattern(final String packageNamefinal String shortClassNames) {
         addIgnoreClassPattern(new ClassPattern(packageNameshortClassNames));
     }
 
     public void addIgnoreClassPattern(final ClassPattern classPattern) {
         .add(classPattern);
     }
 
     public void setTargetInterface(Class<?> targetInterface) {
         if (!targetInterface.isInterface()) {
             throw new IllegalArgumentException(targetInterface.getName());
         }
         this. = targetInterface;
     }
 
     public void customize(final ComponentDef componentDef) {
         if (!isMatchClassPattern(componentDef)) {
             return;
         }
         if (!isMatchTargetInterface(componentDef)) {
             return;
         }
         doCustomize(componentDef);
     }
 
     protected boolean isMatchClassPattern(final ComponentDef componentDef) {
         if (.isEmpty() && .isEmpty()) {
             return true;
         }
         final Class<?> clazz = componentDef.getComponentClass();
         if (clazz == null) {
             return false;
         }
         final String packageName = LdiClassUtil.getPackageName(clazz);
        final String shortClassName = LdiClassUtil.getShortClassName(clazz);
        for (int i = 0; i < .size(); ++i) {
            final ClassPattern cp = (ClassPattern.get(i);
            if (cp.isAppliedPackageName(packageName) && cp.isAppliedShortClassName(shortClassName)) {
                return false;
            }
        }
        if (.isEmpty()) {
            return true;
        }
        for (int i = 0; i < .size(); ++i) {
            final ClassPattern cp = (ClassPattern.get(i);
            if (cp.isAppliedPackageName(packageName) && cp.isAppliedShortClassName(shortClassName)) {
                return true;
            }
        }
        return false;
    }
    protected boolean isMatchTargetInterface(final ComponentDef componentDef) {
        if ( == null) {
            return true;
        }
        final Class<?> clazz = componentDef.getComponentClass();
        if (clazz == null) {
            return false;
        }
        return .isAssignableFrom(clazz);
    }
    protected abstract void doCustomize(final ComponentDef componentDef);
New to GrepCode? Check out our FAQ X