2016-08-01 13 views
0

Ich möchte eine Feder AOP-Funktion, wo wir einen Punkt Schnitt/innerhalb während der Frühjahr Bean-Initialisierung setzen können, um einige Statistiken wie erforderlich für die Wirtschaft zu berechnen. Ich würde gerne wissen, ob es mit Feder AOP-Modul möglich ist?Können wir Spring Bean Initialisierungszeit berechnen

+0

Möchten Sie den Zeitraum berechnen, in dem die Spring Bean die Initialisierungszeit oder die Ausführungszeit Ihrer Geschäftslogik erhält? –

+0

Hallo .. ich möchte Frühjahr Bean berechnen Initialisierung Zeit zu berechnen.Mit dieser Zeit müssen wir einige Business-Kriterien berechnen –

+0

Nur neugierig, welche Art von Business-Kriterien hängt von Federinitialisierungszeit ?. Gibt es eine Logik bei der init-Methode, die mehr Zeit in Anspruch nimmt und Sie diese aufzeichnen müssen? –

Antwort

2

Sie können Initialisierungszeit mit dieser Komponente messen:

@Component 
public class MyBeanPostProcessor implements BeanPostProcessor, Ordered { 

    private Map<String, Long> start; 

    private Map<String, Long> end; 

    public MyBeanPostProcessor() { 
     start = new HashMap<>(); 
     end = new HashMap<>(); 
    } 

    @Override 
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
     start.put(beanName, System.currentTimeMillis()); 
     return bean; 
    } 

    @Override 
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 
     end.put(beanName, System.currentTimeMillis()); 
     return bean; 
    } 

    @Override 
    public int getOrder() { 
     return Integer.MAX_VALUE; 
    } 

    //this method returns initialization time of the bean. 
    public long initializationTime(String beanName) { 
     return end.get(beanName) - start.get(beanName); 
    } 
} 

Aber diesmal nicht enthalten Zeit Konstruktor ausgeführt wird.

Sie können jedoch einen Moment nach dem Lesen der Bean-Definition aufzeichnen, bevor alle Bean-Konstruktoren ausgeführt werden. Verwenden Sie BeanFactoryPostProccessor für sie:

@Component 
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { 

    private long launchTime; 

    @Override 
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { 
     launchTime = System.currentTimeMillis(); 
    } 

    public long getLaunchTime() { 
     return launchTime; 
    } 
} 

Der lauchTime ein Moment ist, wenn die Feder gerade die Konfiguration zu lesen (zum Beispiel XML-Datei) und bereit Bohnen zu erstellen.

So kann die volle Initialisierungszeit berechnet werden, verwenden Sie diese beiden Komponenten wie: max (end) - launchTime. (Der Unterschied zwischen der Zeit, in der die letzte Bean initialisiert und die Bean-Konfiguration gelesen wurde)

Verwandte Themen