2012-11-13 12 views
9

Podążam za tym samouczkiem online do listu. http://www.tutorialspoint.com/spring/spring_bean_life_cycle.htmprzy użyciu registerShutdownHook() w Spring Framework

ale pojawia się błędy przy użyciu Eclipse kiedy się do tej linii: context.registerShutdownHook();

Eclipse mówi:

„Wiele znaczników na tej linii - błąd składni, włóż "AssignmentOperator wyrażenie", aby zakończyć Przypisanie - błąd składni, wstawić ";", aby zakończyć Oświadczenie - Metoda registerShutdownHook() jest niezdefiniowany dla typu ApplicationContext "

Dokładnie obserwuję ten samouczek. Wszystkie moje nazwy zmiennych są dokładnie takie same. Mój kod jest dokładnie taki sam jak jego. Nie jestem pewien, co jest nie tak.

Co robię źle, co można zrobić, aby to naprawić, aby móc kontynuować samouczek.

package com.tutorialspoint; 

import org.springframework.context.support.AbstractApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class MainApp 
{ 
    public static void main(String[] args) 
    { 
     AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); 

     HelloWorld obj = (HelloWorld)context.getBean("helloWorld"); 
     obj.getMessage(); 
     context.registerShutdownHook(); 
    } 
} 
+1

Czy możesz zamieścić swój fragment kodu? – Ankur

+0

'code' package com.tutorialspoint; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { \t public static void main (String [] args) { \t \t \t ApplicationContext context = \t \t \t \t nowe ClassPathXmlApplicationContext ("fasoli.XML "); \t \t \t \t \t \t HelloWorld obj = (HelloWorld) context.getBean (" helloworld "); \t \t obj.getMessage(); \t \t context.registerShutdownHook(); \t \t \t} \t \t \t \t } 'code' –

+0

jak powiedziałem, że używasz' ApplicationContext' istead '' AbstractApplicationContext' – Ankur

Odpowiedz

20

Dla błędu wydaje się, że kontekst jest przedmiotem ApplicationContext, podczas gdy w poradniku powinno być przedmiotem AbstractApplicationContext

jestem tylko zgadywać, że napisał ten

public class MainApp { 
    public static void main(String[] args) { 

     ApplicationContext context = 
          new ClassPathXmlApplicationContext("Beans.xml");//error here 

     HelloWorld obj = (HelloWorld) context.getBean("helloWorld"); 
     obj.getMessage(); 
     context.registerShutdownHook(); 
    } 
} 
+0

OK, jaki import jest potrzebny do użycia AbstractApplicationContext? W tej chwili mówi mi, że nie można go rozwiązać na typ. –

+0

po prostu naciśnij control + shift + o, jeśli używasz Eclipse, lub 'import org.springframework.context.support.AbstractApplicationContext' – Ankur

+0

Bardzo dziękuję To zadziałało =) –

1

You powinien używać AbstractApplicationContext zamiast ApplicationContext zgodnie z dokumentacją sprężyny http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-nature

import org.springframework.context.support.AbstractApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public final class Boot { 

public static void main(final String[] args) throws Exception { 
    AbstractApplicationContext ctx 
     = new ClassPathXmlApplicationContext(new String []{"beans.xml"}); 

    // add a shutdown hook for the above context... 
    ctx.registerShutdownHook(); 

    // app runs here... 

    // main method exits, hook is called prior to the app shutting down... 
} 
} 
0

Oto kod, który zadziałał dla mnie.

package arjun; 

import org.springframework.beans.factory.BeanFactory; 
import org.springframework.beans.factory.xml.XmlBeanFactory; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.AbstractApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import org.springframework.core.io.ClassPathResource; 
import org.springframework.core.io.FileSystemResource; 

public class Main { 

    public static void main(String[] args) { 

       AbstractApplicationContext context= new ClassPathXmlApplicationContext("spring.xml"); 
       context.registerShutdownHook(); 
       Triangle triangle=(Triangle) context.getBean("triangle"); 
       triangle.draw(); 
    } 

} 
0

// użyciu tej linii

((AbstractApplicationContext) CTX) .registerShutdownHook();

0

Oto zaktualizowana rozwiązanie:

import org.springframework.context.support.AbstractApplicationContext; 

((AbstractApplicationContext) appContext).registerShutdownHook(); 
1

ja też mam ten sam problem. Rozwiązałem to w ten sposób.

public static void main(String[] args) { 
    ApplicationContext context = new ClassPathXmlApplicationContext("Bean.xml"); 
    HelloWorld obj =(HelloWorld)context.getBean("helloWorld"); 
    obj.getMessage(); 
    ((AbstractApplicationContext) context).registerShutdownHook(); 
} 
+0

Nie zapomnij zaimportować (zaimportować org.springframework.context.support.AbstractApplicationContext;) – Susampath

Powiązane problemy