не может получить доступ к аннотированной весенней службе - PullRequest
1 голос
/ 09 октября 2009

Я пытаюсь получить доступ к @Service определенному классу

Интерфейсы определены, вот реализация

    @Service
    public class TypeServiceImpl implements TypeService {

        @Autowired
        TypeDAO dao;

        public List<DocType> findAll() {
    System.out.println("accessing findAll"); //have no appearence
    return dao.findAll();
}

публичный TypeDAOImpl () { System.out.println ("Построение типа DAOImpl"); }

...

}

код для DAO:

@Repository
public class TypeDAOImpl extends BaseDAO<Type, Long> implements TypeDAO{

}

BaseDAO:

public class BaseDAO<T, ID extends Serializable> extends GenericDAOImpl<T, ID> {

    @Autowired
    @Override
    public void setSessionFactory(SessionFactory sessionFactory) {
        super.setSessionFactory(sessionFactory);
    }
}

используется универсальный дао Конфигурация для приложения загружается нормально (без предупреждений или ошибок), но когда я пытаюсь использовать службу:

@Autowired
private TypeService TypeService;
public void init() {

        try {
            for (Type d : TypeService.findAll()) {
                System.out.println(d.getType());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
}

в приложенииContext:

<!-- Use annotations (@Autowired) for property injection -->
    <context:annotation-config />

в логах: ИНФОРМАЦИЯ: Предварительное создание синглетонов в org.springframework.beans.factory.support.DefaultListableBeanFactory@14db0e3: ... typeDAOImpl, appMain, typeServiceImpl

my web.xml

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:/config/application-context.xml,classpath:/config/datasource-context.xml</param-value>
    </context-param>
    <context-param>
        <description>
    Vaadin production mode</description>
        <param-name>productionMode</param-name>
        <param-value>false</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
     <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener> 
     <servlet>
        <servlet-name>My Application</servlet-name>
        <servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
        <init-param>
            <description>
        Vaadin application class to start</description>
            <param-name>application</param-name>
            <param-value>myapp.main.MainApp</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>My Application</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
...

трассировка стека "очень информативна" (я использовал vaadin в качестве веб-фреймворка)

java.lang.NullPointerException at main.AppMain.init (AppMain.java:26) на com.vaadin.Application.start (Application.java:497) на com.vaadin.terminal.gwt.server.AbstractApplicationServlet.startApplication (AbstractApplicationServlet.java:1001) на com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service (AbstractApplicationServlet.java:411) на javax.servlet.http.HttpServlet.service (HttpServlet.java:717) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:290) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:233) в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:191) в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:128) в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102) в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:109) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:293) в org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:849) в org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process (Http11Protocol.java:583) в org.apache.tomcat.util.net.JIoEndpoint $ Worker.run (JIoEndpoint.java:454) at java.lang.Thread.run (неизвестный источник)

Есть предложения?

Я добавил конструкторы для GenericDAOHibernate и TypeDAOImpl, так что, как я понимаю, эти компоненты инициализируются ... 12.10.2009 12:57:48 org.hibernate.impl.SessionFactoryImpl ИНФОРМАЦИЯ: строительная сессия фабрики 12.10.2009 12:57:48 org.hibernate.impl.SessionFactoryObjectFactory addInstance ИНФОРМАЦИЯ: Не привязывать фабрику к JNDI, имя JNDI не настроено Построение общего DAO Построение типа DAOImpl 12.10.2009 12:57:48 org.springframework.web.context.ContextLoader initWebApplicationContext ...

Я не понимаю, потому что этот конфиг работал с ZK ..

1 Ответ

0 голосов
/ 09 октября 2009

Код, который вы опубликовали, довольно противоречив.

findAll() метод нигде не объявлен; плюс реализация сервиса реализует Service, но вы пытаетесь автоматически подключить его к TypeService, который не будет работать.

Если первый фрагмент кода был записан как:

@Service
public class TypeServiceImpl implements TypeService {

и это была единственная реализация TypeService в контексте вашего приложения, автоматическое подключение работало бы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...