代码之家  ›  专栏  ›  技术社区  ›  ziftech

无法访问带注释的spring服务

  •  1
  • ziftech  · 技术社区  · 16 年前

    我正在尝试访问@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();
    }
    

    公共类型daoimpl() 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);
        }
    }
    

    generic dao 应用程序的配置加载正常(无警告或错误),但当我尝试使用该服务时:

    @Autowired
    private TypeService TypeService;
    public void init() {
    
            try {
                for (Type d : TypeService.findAll()) {
                    System.out.println(d.getType());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    }
    

    在applicationContext中:

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

    在日志中: 信息:在org.springframework.beans.factory.support中预实例化单例。DefaultListableBeanFactory@14db0e3: ... typeDAOImpl、appMain、typeServiceImpl

    <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作为web框架)

    位于main.AppMain.init(AppMain.java:26) 位于com.vaadin.terminal.gwt.server.AbstractApplicationServlet.startApplication(AbstractApplicationServlet.java:1001) 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 位于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.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)

    有什么建议吗?

    ... 信息:建立会话工厂 12.10.2009 12:57:48 org.hibernate.impl.SessionFactoryObjectFactory附加实例 信息:未将工厂绑定到JNDI,未配置JNDI名称 构造泛型DAO 12.10.2009 12:57:48 org.springframework.web.context.ContextLoader initWebApplicationContext ...

    1 回复  |  直到 16 年前
        1
  •  0
  •   ChssPly76    16 年前

    您发布的代码相当不一致。

    findAll() 方法不在任何地方声明;plus服务实现 Service 但你想把它自动连接到 TypeService 这是行不通的。

    如果第一个代码片段改为编写为:

    @Service
    public class TypeServiceImpl implements TypeService {
    

    这是唯一的 打字服务 在您的应用程序上下文中实现,自动连接将起作用。