Нет доступных компонентов типа «repository.Dao» - PullRequest
2 голосов
/ 26 февраля 2020

Когда я запускаю этот код, он показывает ошибку такого типа:

org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания компонента с именем 'orderController': неудовлетворенная зависимость, выраженная через метод ' setOrderService 'параметр 0; Вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка при создании bean-компонента с именем 'orderServiceImpl', определенным в файле [C: \ projects \ crudmvc \ out \ artifacts \ crudmvc_war_exploded \ WEB-INF \ classesIl \ service.class \ OrderSer. ]: Неудовлетворенная зависимость выражается через параметр конструктора 0; Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'repository.Dao': ожидается как минимум 1 компонент, который считается кандидатом autowire. Аннотации зависимостей: {} в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredMethodElement.inject (AutowiredAnnotationBeanPostProcessor. java: 719 * * инфоинформация. : 116) в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties (AutowiredAnnotationBeanPostProcessor. java: 397) в org.springframework.beans. (. AbstractAutowireCapableBeanFactory java 594) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory * * тысяча тридцать шесть:. 517) при org.springframework. beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0 (AbstractBeanFactory. java: 323) в org.springfr amework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry. java: 222) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBean39. factory.support. finishBeanFactoryInitialization (AbstractApplicationContext. java: 878) по адресу org.springframework.context.support.AbstractApplicationContext.refre sh (AbstractApplicationContext. java: 550) по адресу org.springframework.weConteAA 1045 *: 401) в org.springframework.web.context.ContextLoader.initWebApplicationContext (ContextLoader. java: 292) в org.springframework.web.context.ContextLoaderListener.contextInit ialized (ContextLoaderListener. java: 103) в орг. apache .catalina.core.StandardContext.listenerStart (StandardContext. java: 4699) в орг. apache .catalina.core.StandardContext.startInternal (StandardContext. java: 5165) в орг. apache .catalina.util.LifecycleBase.start (LifecycleBase. java: 183) в орг. apache .catalina.core.ContainerBase.addChildInternal (ContainerBase. java: 743) в орг. apache .catalina.core.ContainerBase.addChild (ContainerBase. java: 719) в орг. apache .catalina.core.StandardHost.addChild (StandardHost. java: 705) в орг. . apache .catalina.startup.HostConfig.manageApp (HostConfig. java: 1720) в java .base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в java .base / jdk. internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl. java: 62) в java .base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl. java: 43) в java .base / java .lang.reflect.Method.invoke (Метод. java: 566) в org. apache .tomcat.util.modeler.BaseModelMBean.invoke ( BaseModelMBean. java: 287) в java .management / com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke (DefaultMBeanServerInterceptor. java: 809) в java .management / com.sun.jserx.mbe. JmxMBeanServer.invoke (JmxMBeanServer. java: 801) в орг. apache .catalina.mbeans.MBeanFactory.createStandardContext (MBeanFactory. java: 479) в орг. Железной дороге. MBeanFactory. java: 428) в java .base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в java .base / jdk.internal.reflect.NativeMethodAccessorIccessl.invoke *Impl. : 62) в java .base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl. java: 43) в java .base / java .lang.reflect.Method.invoke (Метод. java: 566) в орг. apache .tomcat.util.modeler.BaseModelMBean.invoke (BaseModelMBean. java: 287) в java .management / com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke (DefaultMBeanServerInterceptor. java: 809) в java .management / com.sun.jmx.mbeanserver.JmverMan (JmxMBeanServer. java: 801) в java .management / com.sun.jmx.remote.security.MBeanServerAccessController.invoke (MBeanServerAccessController. java: 468) в java .management.rmi / jav .remote.rmi.RMIConnectionImpl.doOperation (RMIConnectionImpl. java: 1466) в java .management.rmi / javax.management.remote.rmi.RMIConnectionImpl $ PrivilegedOperation.run (RMIConnectionImpl. java): 1399 java .base / java .security.AccessController.doPrivileged (собственный метод) в java .management.rmi / javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation (RMIConnectionImpl. java: 1406) в * .management.rmi / javax.management.remote.rmi.RMIConnectionImpl.invoke (RMIConnectionImpl. java: 827) в java .base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в * 1107 .база/ jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl. java: 62) в java .base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke * DelegatingMethodAccessor 11) at. java .lang.reflect.Method.invoke (Метод. java: 566) в java .rmi / sun.rmi.server.UnicastServerRef.dispatch (UnicastServerRef. java: 359) в java. rmi / sun.rmi.transport.Transport $ 1.run (Транспорт. java: 200) в java .rmi / sun.rmi.transport.Transport $ 1.run (Транспорт. java: 197) в java .base / java .security.AccessController.doPrivileged (собственный метод) на java .rmi / sun.rmi.transport.Transport.serviceCall (Транспорт. java: 196) на java .rmi / sun .rmi.transport.tcp.TCPTransport.handleMessages (TCPTransport. java: 562) в java .rmi / sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0 (TCPTransport. java: 796) в java .rmi / sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.lambda $ run $ 0 (TCPTransport. java: 677) в java .base / java .security.AccessController.doPrivileged (Nat) ive Method) в java .rmi / sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run (TCPTransport. java: 676) в java .base / java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1128) в java .base / java .util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 628) в java .base / java .lang .Thread.run (Thread. java: 834) Причина: org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания компонента с именем 'orderServiceImpl', определенным в файле [C: \ projects \ crudmvc \ out \ artifacts \ crudmvc_war_exploded \ WEB-INF \ Classes \ сервис \ OrderServiceImpl.class]: Неудовлетворенная зависимость выражается через параметр конструктора 0; Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'repository.Dao': ожидается как минимум 1 компонент, который считается кандидатом autowire. Аннотации зависимостей: {} at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver. java: 787) в org.springframework.beans.factory.support.ConstructorResolver.45. ) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor (AbstractAutowireCapableBeanFactory java:. 1358) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory java:. 1204) в орг. (. AbstractAutowireCapableBeanFactory * * одна тысяча сто сорок восемь: 557) springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory java:. 517) при org.springframework.beans. factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0 (AbstractBeanFactory. java: 323) в org.springframework.beans.factory.support.Defau ltSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry. java: 222) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory. java: 321) AbstractBeanFactory. java: 202) в org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate (DependencyDescriptor. java: 276) в org.springframework.beans.factory.support.DefanLactableDe *: 1287) в org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory. java: 1207) в org.springframework.beans.factory.annotation. 711) ... еще 61 Причина: org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'repository.Dao': ожидается как минимум 1 компонент w Который квалифицируется как кандидат Autowire. Зависимость

Контроллер:

@Controller
@RequestMapping("/general")
public class OrderController {
    private OrderService orderService;

    @Autowired
    @Qualifier("orderServiceImpl")
    public void setOrderService(OrderService orderService) {
        this.orderService = orderService;
    }

    @GetMapping(value = "/list")
    public String get(Model theModel) {

        theModel.addAttribute("orders", orderService.getOrders());

        return "index";
    }

    @GetMapping(value = "/showFormForAdd")
    public String add(Model theModel) {
        Orders orders = new Orders();

        theModel.addAttribute("order", orders);

        return "create-orders";
    }

    @PostMapping(value = "/saveOrders")
    public String addOrders(@ModelAttribute Orders orders, @RequestParam MultipartFile file) throws IOException {
        orders = orderService.uploadOrders(orders, file);
        orderService.save(orders);

        return "redirect:/general/list";
    }
}

Модель:

@Entity
@Table(name = "orders")
public class Orders {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "description")
    private String description;

    @Column(name = "price")
    private int price;

    @Column(name = "sold")
    private boolean sold;

    @Column(name = "body")
    private String body;

    @Column(name = "brand")
    private String brand;

    @Column(name = "engine")
    private String engine;

    @Column(name = "model")
    private String model;

    @Lob
    @Column(name = "image")
    private byte[] image;

    @Column(name = "imageStr")
    private String imageStr;


    public Orders() {
    }

    public Orders(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public boolean isSold() {
        return sold;
    }

    public void setSold(boolean sold) {
        this.sold = sold;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getEngine() {
        return engine;
    }

    public void setEngine(String engine) {
        this.engine = engine;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public byte[] getImage() {
        return image;
    }

    public void setImage(byte[] image) {
        this.image = image;
    }

    public String getImageStr() {
        return imageStr;
    }

    public void setImageStr(String imageStr) {
        this.imageStr = imageStr;
    }
}

Репозиторий:

@Repository
public interface Dao extends CrudRepository<Orders, Long>{

}

Служба заказа:

public interface OrderService {
    List<Orders> getOrders();

    Orders uploadOrders(Orders orders, MultipartFile file) throws IOException;

    void save(Orders orders);
}

OrderServiceImpl:

@Service
public class OrderServiceImpl implements OrderService {

    private Dao dao;


    @Autowired
    public OrderServiceImpl(Dao dao) {
        this.dao = dao;
    }

    @Override
    public List<Orders> getOrders() {
        return Lists.newArrayList(dao.findAll());
    }

    @Override
    public void save(Orders orders) {
        dao.save(orders);
    }

    @Override
    public Orders uploadOrders(Orders orders, MultipartFile file) throws IOException {
        if (!file.isEmpty()) {
            String uploadDir = file.getOriginalFilename();

            orders.setImage(file.getBytes());
            orders.setImageStr(uploadDir);
        }

        return orders;
    }
}

spring-context. 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"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
         http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
         http://www.springframework.org/schema/context
         https://www.springframework.org/schema/context/spring-context-4.0.xsd">

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

    <import resource="hibernate.cfg.xml"/>
    <bean id = "dao" class ="repository.Dao" abstract="true"/>

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

</beans>

hibernate.cfg. 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"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">

    <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.postgresql.Driver"/>
        <property name="url"/>
        <property name="username" value="postgres"/>
        <property name="password" value="root"/>

    </bean>



    <bean id="sessionFactory"
          class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="myDataSource"/>
        <property name="packagesToScan" value="models"/>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>

    <bean id="myTransactionManager"
          class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <tx:annotation-driven transaction-manager="myTransactionManager"/>


</beans>

web. xml

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
        http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring-context.xml
        </param-value>
    </context-param>


    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>


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


    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

1 Ответ

0 голосов
/ 10 марта 2020

я добавил код в hibernate.cfg. xml вот так:

  <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.postgresql.Driver"/>
        <property name="url"/>
        <property name="username" value="postgres"/>
        <property name="password" value="root"/>
    </bean>

    <bean id="entityManagerFactory"
          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="packagesToScan" value="models" />
        <property name="dataSource" ref="myDataSource" />

        <property name="jpaProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            </props>
        </property>

        <property name="persistenceProvider">
            <bean class="org.hibernate.jpa.HibernatePersistenceProvider"></bean>
        </property>

    </bean>

    <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <jpa:repositories base-package="repository" entity-manager-factory-ref="entityManagerFactory" />

Также я добавил в класс OrderServiceImpl это:

@Resource
private Dao dao;

И теперь нет ошибок и все работает

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