복붙노트

[SPRING] Autowiring 실패 : 관리 유형이 아닙니다.

SPRING

Autowiring 실패 : 관리 유형이 아닙니다.

나는 디플로마 프로젝트에 큰 문제가있어, 너희들이 나를 도울 수 있다면 정말 기뻐할거야! 나는 Maven 다중 모듈 프로젝트를 만들었고 3 가지 "핵심 프로젝트"

이제 Tomcat에서 Server를 시작하려고 할 때마다 다음 오류가 발생합니다.

ERROR: org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'transaktionsRepository': 
Injection of persistence dependencies failed; 
nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: 
Error loading class [at.naviclean.service.impl.MeinRemoteDienstImpl] for bean with name 'meinRemoteDienstImpl' defined in file [C:\Users\Fredy\Documents\workspace-sts-3.1.0.RELEASE\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\NaviCleanServer\WEB-INF\classes\at\naviclean\service\impl\MeinRemoteDienstImpl.class]: 
problem with class file or dependent class; 
nested exception is java.lang.NoClassDefFoundError: at/naviclean/service/MeinRemoteDienst
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:342)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
    ……………….

ModelBase :

package at.naviclean.domain;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Version;

@SuppressWarnings("serial")
@MappedSuperclass
public class ModelBase implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @Version
    @Column(name = "ts")
    private Date timestamp;

    public Long getId() {
        return id;
    }

    public Date getTimestamp() {
        return timestamp;
    }

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

    public void setTimestamp(Date timestamp) {
        this.timestamp = timestamp;
    }

}

현금 등록기 :

package at.naviclean.domain;

import javax.persistence.Column;
import javax.persistence.Entity;

@SuppressWarnings("serial")
@Entity
public class Kassa extends ModelBase {

    @Column(name = "name", unique = true)
    private String name;

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

    public Kassa(String name, int geld) {
        this.name = name;
        this.geld = geld;
    }

    public Kassa() {
    }

    public String getName() {
        return name;
    }

    public int getGeld() {
        return geld;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setGeld(int geld) {
        this.geld = geld;
    }

}

메인되고 가질 ぢえん st :

package at.naviclean.service;

import at.naviclean.domain.Kassa;

public interface MeinRemoteDienst {

    int getKassaCount(int plus);

    String getNameFromKassa(int id);

    Kassa findById(int id);
}

BaseRepository

package at.naviclean.repositories;

import org.springframework.data.jpa.repository.JpaRepository;

import at.naviclean.domain.ModelBase;

public interface BaseRepository<T extends ModelBase> extends
        JpaRepository<T, Long> {
    T findById(long id);

}

KassaRepository :

package at.naviclean.repositories;

import java.util.List;

import org.springframework.data.jpa.repository.Query;

import at.naviclean.domain.Kassa;

public interface KassaRepository extends BaseRepository<Kassa> {
    List<Kassa> findByGeld(int geld);

    Kassa findByName(String name);

    @Query("select k from Kassa k where k.geld = ?1")
    Kassa findByGeld1(int geld);
}

메인되고 가질 ぢえん s 치 mpl :

package at.naviclean.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import at.naviclean.domain.Kassa;
import at.naviclean.repositories.KassaRepository;
import at.naviclean.service.MeinRemoteDienst;

@Service
public class MeinRemoteDienstImpl implements MeinRemoteDienst {

    @Autowired(required = true)
    public KassaRepository kassaR;

    public int getKassaCount(int plus) {
        return 2;
    }


    public String getNameFromKassa(int id) {
        return kassaR.findById(id + 0l).getName();
    }

    @Override
    public Kassa findById(int id) {
        return = kassaR.findById(id + 0l);
    }

}

application-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:jpa="http://www.springframework.org/schema/data/jpa"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:repository="http://www.springframework.org/schema/data/repository"
    xsi:schemaLocation="http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


    <import resource="infrastructures.xml" />

    <jpa:repositories base-package="at.naviclean.repositories">
        <repository:exclude-filter type="regex"
            expression="at.naviclean.repositories.BaseRepository" />
    </jpa:repositories>

    <context:component-scan base-package="at.naviclean.service.impl" />

</beans>

infrastructures.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:jdbc="http://www.springframework.org/schema/jdbc"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
                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">



        <bean id="entityManagerFactory"
                class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
                <property name="dataSource" ref="dataSource" />
                <property name="jpaVendorAdapter">
                        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                                <property name="showSql" value="true" />
                                <property name="generateDdl" value="true" />
                                <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
                        </bean>
                </property>
        </bean>

        <bean id="dataSource"
                class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                <property name="driverClassName" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost/kassatest" />
                <property name="username" value="root" />
                <property name="password" value="" />
        </bean>

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


        <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />

</beans>

servlet-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"
    xmlns:c="http://www.springframework.org/schema/c"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">



<import resource="../root-context.xml" />
    <bean id="idMeinRemoteDienst" class="at.naviclean.service.impl.MeinRemoteDienstImpl" />
    <bean name="/MeinRemoteDienstHessian"
        class="org.springframework.remoting.caucho.HessianServiceExporter"
        p:serviceInterface="at.naviclean.service.MeinRemoteDienst"
        p:service-ref="idMeinRemoteDienst" />

</beans>

root-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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <import resource="classpath:META-INF/spring/application-context.xml" />

</beans>

веб.хмл :

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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">

    <!-- The definition of the Root Spring Container shared by all Servlets 
        and Filters -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml</param-value>
    </context-param>

    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


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

    <servlet-mapping>
        <servlet-name>/MeinRemoteDienstHessian</servlet-name>
        <url-pattern>/remoting/*</url-pattern>
    </servlet-mapping>

</web-app>

여기 내가 이미 시도한 것이있다. 1. 나는 "붉은 색"이 된이 시험을 썼다.

해결법

  1. ==============================

    1.나는 Oliver Gierke에게서 아주 도움이되는 통보를 얻었다 :

    나는 Oliver Gierke에게서 아주 도움이되는 통보를 얻었다 :

    감사!

  2. ==============================

    2.예를 들어 컴포넌트 스캔의 범위를 확장해야합니다. 엔티티를 패키지 at.naviclean.domain에 배치 했으므로;

    예를 들어 컴포넌트 스캔의 범위를 확장해야합니다. 엔티티를 패키지 at.naviclean.domain에 배치 했으므로;

    이렇게하면 예외를 제거하는 데 도움이됩니다. 관리 유형이 아님 : class at.naviclean.domain.Kassa

    추가 디버깅을 위해 응용 프로그램 컨텍스트 (javadoc 참조)를 덤프하여 구성 요소 검사에서 발견 된 클래스를 탐색 할 수 있습니다. 일부는 아직 인식되지 않는 경우 해당 주석 (@Service, @Component 등)을 검사합니다.

    편집하다:

    또한 persistence.xml에 클래스를 추가해야한다.

    <persistence-unit>
        <class>at.naviclean.domain.Kassa</class>
         ...
    </persistence-unit>
    
  3. ==============================

    3.Spring 부트에서는 CrudRepository를 사용하여 동일한 예외를 얻었습니다. 왜냐하면 Generic Type을 설정하는 것을 잊었 기 때문입니다. 누군가를 돕기 위해 여기에 적어 둡니다.

    Spring 부트에서는 CrudRepository를 사용하여 동일한 예외를 얻었습니다. 왜냐하면 Generic Type을 설정하는 것을 잊었 기 때문입니다. 누군가를 돕기 위해 여기에 적어 둡니다.

    잘못된 정의 :

    public interface OctopusPropertiesRepository extends CrudRepository
    

    오류:

    Caused by: java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object
    

    성공적인 정의 :

    public interface OctopusPropertiesRepository extends CrudRepository<OctopusProperties,Long>{
    
  4. ==============================

    4.제 경우에는 IntelliJ를 사용할 때 프로젝트에 여러 개의 모듈이있었습니다. 메인 모듈은 스프링에 의존하는 다른 모듈에 의존했다.

    제 경우에는 IntelliJ를 사용할 때 프로젝트에 여러 개의 모듈이있었습니다. 메인 모듈은 스프링에 의존하는 다른 모듈에 의존했다.

    주 모듈에는 엔티티가 있고 두 번째 모듈도 엔티티를가집니다. 하지만 메인 모듈을 실행할 때 두 번째 모듈의 엔티티 만 관리되는 클래스로 인식됩니다.

    그런 다음 주 모듈에 Spring 종속성을 추가하고 추측하니? 그것은 모든 실체를 인정했다.

  5. ==============================

    5.만약 누군가가 같은 문제로 어려움을 겪고 있다면 나는 메인 클래스에 @EntityScan을 추가하여 그것을 해결했다. modelPackages 속성에 모델 패키지를 추가하기 만하면됩니다.

    만약 누군가가 같은 문제로 어려움을 겪고 있다면 나는 메인 클래스에 @EntityScan을 추가하여 그것을 해결했다. modelPackages 속성에 모델 패키지를 추가하기 만하면됩니다.

  6. ==============================

    6.packageToScan을 확인해야합니다.

    packageToScan을 확인해야합니다.

    <bean id="entityManagerFactoryDB" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
        <property name="dataSource" ref="dataSourceDB" />
        <property name="persistenceUnitName" value="persistenceUnitDB" />
        <property name="packagesToScan" value="at.naviclean.domain" />
                                                //here
     .....
    
  7. ==============================

    7.이 문제가 발생하고 EntityScan, ComponentScan 등에 엔티티 패키지 이름을 추가하는 다른 방법을 시도했지만 그 중 아무 것도 작동하지 않았습니다.

    이 문제가 발생하고 EntityScan, ComponentScan 등에 엔티티 패키지 이름을 추가하는 다른 방법을 시도했지만 그 중 아무 것도 작동하지 않았습니다.

    저장소 설정의 EntityManagerFactory에서 packageScan config에 패키지를 추가했습니다. 아래의 코드는 위의 XML 기반의 설정과 반대되는 코드 기반의 설정을 제공합니다.

    @Primary
    @Bean(name = "entityManagerFactory")
    public EntityManagerFactory entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
        emf.setDataSource(dataSource);
        emf.setJpaVendorAdapter(jpaVendorAdapter);
        emf.setPackagesToScan("org.package.entity");
        emf.setPersistenceUnitName("default"); 
        emf.afterPropertiesSet();
        return emf.getObject();
    }
    
  8. ==============================

    8.Oliver Gierke의 암시를 참고하십시오.

    Oliver Gierke의 암시를 참고하십시오.

    persistence.xml을 조작하면 트릭이 생기고 엔티티 클래스 대신 일반적인 자바 클래스가 생성된다.

    새로운 엔티티 - 클래스를 생성 할 때 persistence.xml의 항목은 Netbeans에 의해 설정되어야합니다 (필자의 경우).

    하지만 Oliver Gierke가 언급했듯이 나중에 엔트리를 persistence.xml에 추가 할 수 있습니다 (일반적인 Java 클래스를 만든 경우).

  9. ==============================

    9.나에게있어 오류는 매우 간단했다. @alfred_m이 말한 것에 따르면 ... tomcat은 2 개의 jar가 동일한 클래스 이름과 구성 집합을 가지고 충돌하는 것을 가지고 있었다.

    나에게있어 오류는 매우 간단했다. @alfred_m이 말한 것에 따르면 ... tomcat은 2 개의 jar가 동일한 클래스 이름과 구성 집합을 가지고 충돌하는 것을 가지고 있었다.

    무슨 일이 있었는지 .............. 기존 프로젝트를 복사하여 기존 프로젝트에서 새 프로젝트를 만들었습니다. 그러나 필요한 변경없이, 나는 다른 프로젝트에 착수했다. Henec 2 프로젝트에는 동일한 클래스와 구성 파일이있어 충돌이 발생했습니다.

    복사 된 프로젝트를 삭제하고 모든 일이 시작되었습니다 !!!!

  10. ==============================

    10.JpaRepository (KassaRepository는 JpaRepository를 확장하는 BaseRepository를 확장 함)를 간접적으로 확장하면 BaseRepository에 @NoRepositoryBean을 주석으로 추가해야합니다.

    JpaRepository (KassaRepository는 JpaRepository를 확장하는 BaseRepository를 확장 함)를 간접적으로 확장하면 BaseRepository에 @NoRepositoryBean을 주석으로 추가해야합니다.

    @NoRepositoryBean
    public interface BaseRepository<T extends ModelBase> extends JpaRepository<T, Long> {
        T findById(long id);
    }
    
  11. from https://stackoverflow.com/questions/14069449/autowiring-fails-not-an-managed-type by cc-by-sa and MIT license