【问题标题】:Could not autowire. No beans of ... type found无法自动接线。找不到...类型的豆子
【发布时间】:2014-08-17 22:26:25
【问题描述】:

你能帮我解决为什么我不能自动装配课程吗? 类 UserDaoImpl:

@Repository
public class UserDaoImpl implements UserDao {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public void addUser(User user) {
        sessionFactory.getCurrentSession().save(user);
    }

    @Override
    public List<User> getUsers() {
        return sessionFactory.getCurrentSession().createSQLQuery("SELECT * FROM user").list();
    }

}

我希望这个类自动连接到其他类:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao; //here is the error

    @Override
    public void addUser(User user) {

    }

    @Override
    public List<User> getUsers() {
        return null;
    }

}

控制器:

@Controller
public class UserController {

    @Autowired
    UserService userService;

    String message = "This should be a list of users";

    @RequestMapping("/user")
    public ModelAndView showMessage() {
        ModelAndView modelAndView = new ModelAndView("user");
        modelAndView.addObject("message", message);
        return modelAndView;
    }

}

问题可能出在哪里?我应该给你看更多的文件吗?谢谢。 编辑:好的,这是我的 session-factory.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.connection.driver_class">org.postgresql.Driver</prop>
                <prop key="hibernate.connection.url">jdbc:postgresql://localhost:8080/****</prop>
                <prop key="hibernate.connection.username">****</prop>
                <prop key="hibernate.connection.password">****</prop>
                <prop key="hibernate.current_session_context_class">thread</prop>
                <prop key="show_sql">true</prop>
            </props>
        </property>
        <property name="annotatedClasses">
            <list>
                <value>model.User</value>
            </list>
        </property>
    </bean>

 </beans>

-class User 是简单的 POJO,它是用 hibernate 映射的。也许 web.xml 可以帮助我们:)

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    <display-name>Archetype Created Web Application</display-name>

    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

</web-app>

mvc-servlet-dispatcher.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="controller" />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

我没有任何 applicationContext.xml 文件,这可能是问题所在,你能帮我解决这个问题吗? 我正在添加我的项目和问题的屏幕截图:http://screenshot.cz/75QVH/

【问题讨论】:

  • 是的,当然,向我们展示您的配置。为什么你希望一个自动连接到另一个?
  • 并显示实际异常。
  • 向我们展示您的applicationContext.xml 文件和mvc-dispatcher-servlet.xml
  • 以及这些类的包名。我怀疑你的组件正在扫描。
  • 我添加了带有包名的屏幕截图..

标签: java spring hibernate postgresql


【解决方案1】:

您的@Repository 没有被&lt;context:component-scan base-package="controller" /&gt; 根据您向我们展示的内容接收(扫描)。但是我们需要查看每个类的包。 Spring 取决于您告诉它要查找哪些包以查找您的 @Service@Controller@Repository@Component

看看组件扫描在春季是如何工作的。

【讨论】:

  • 刚刚看到你的包结构,你应该清理它并设置 com.foo.web、com.foo.service 等,然后将你的 &lt;context:component-scan base-package="controller" /&gt; 设置为 &lt;context:component-scan base-package="com.foo" /&gt;,它应该会拾取您的存储库类。
  • 是的,我也找到了,谢谢,错误消失了,但我仍然遇到异常,开头为:org.springframework.beans.factory.BeanCreationException:创建名为“userController”的bean时出错:注入自动装配依赖项失败;嵌套异常是...
  • 需要查看您的控制器,因为这就是您的问题所在。异常堆栈跟踪也会有所帮助。
  • 我的控制器非常简单,只是为了显示一条消息,因为实际上我的数据库是空的,我只想设置基本应用程序,但我将它添加到我的帖子中,这是完整的堆栈跟踪: pastebin.com/tjfR1vMJ
  • 看起来缺少 org.hibernate.SessionFactory bean。所以看起来 session-factory.xml 没有被读取。您可以通过两种方式做到这一点,一种是在 mvc-servlet-dispatcher.xml 中导入 session-factory.xml,或者只是将 sessionFactory bean 复制到 mvc-servlet-dispatcher.xml 文件中
【解决方案2】:

不要在打印 bean 之前打印 @Autowired。否则,会出现 No beans of … type found @Autowired private ProjectRepository projectRepository;

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 2019-08-17
    • 2021-07-02
    • 2020-08-31
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多