2014-05-19 12 views
9

Chúng tôi đã tìm kiếm một chút trên cả internet và các khóa học bìa mềm của chúng tôi nhưng dường như không tìm được giải pháp cho chúng tôi vấn đề:NoUniqueBeanDefinitionException: không có loại đậu đủ điều kiện ... tôi đã xác định, đậu tương ứng dự kiến ​​nhưng tìm thấy 2

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [services.GebruikerDAO] is defined: expected single matching bean but found 2: gebruikerDAO,GebruikerDAO 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:863) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486) 
... 58 more 

để phác họa một số thông tin cơ bản: chúng ta phải thực hiện một trang web nhỏ sử dụng các trang jsp java và tất cả, cùng với an ninh mùa xuân và maven sử dụng một DB để lấy thông tin và kiểm tra thông tin. Sau đây sẽ là tất cả các tệp của chúng tôi.

Đây là lớp GebruikerDAO của chúng tôi:

package services; 
import domein.Gebruiker; 

public interface GebruikerDAO extends GenericDao<Gebruiker>{ 

    public Gebruiker getGebruikerByStamnummer(String stamnummer); 

} 

Đây là lớp JpaGebruikerDao của chúng tôi:

@Repository("gebruikerDAO") 
public class JpaGebruikerDao extends GenericDaoJpa<Gebruiker> implements GebruikerDAO{ 

    @PersistenceContext 
    private EntityManager em; 

    public JpaGebruikerDao() 
    { 
     super(Gebruiker.class); 
    } 

    /*@Override 
    @Transactional 
    public List<Gebruiker> findAll() { 
     CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); 
     CriteriaQuery<Gebruiker> criteriaQuery = criteriaBuilder.createQuery(Gebruiker.class); 

     Root<Gebruiker> gebruiker = criteriaQuery.from(Gebruiker.class); 

     criteriaQuery.orderBy(criteriaBuilder.desc(gebruiker.get(Gebruiker_.familienaam))); 

    // JPQL select 
     criteriaQuery.select(gebruiker); 

     TypedQuery<Gebruiker> query = em.createQuery(criteriaQuery); 
     return query.getResultList(); 
    }*/ 

    // CRUD methods 
    @Override 
    @Transactional 
    public Gebruiker update(Gebruiker gebruiker) { 
     return em.merge(gebruiker); 
    } 

    @Override 
    @Transactional(readOnly = true) 
    public Gebruiker get(String id) { 
     return em.find(Gebruiker.class, id); 
    } 

    @Override 
    @Transactional 
    public void insert(Gebruiker gebruiker) { 
     em.persist(gebruiker); 
    } 

    @Override 
    @Transactional 
    public void delete(Gebruiker gebruiker) { 
     em.remove(em.merge(gebruiker)); 
    } 

    @Override 
    public Gebruiker getGebruikerByStamnummer(String stamnummer) { 
     return get(stamnummer); 
    } 
} 

Đây là lớp điều khiển của chúng tôi:

@Controller 
public class PlanningController { 

    @Autowired 
    @Qualifier("GebruikerDAO") 
    private GebruikerDAO gebruikerDao; 

    @RequestMapping(value = "/planning", method = RequestMethod.GET) 
    public String listGuest(Model model) 
    { 
     List<Gebruiker> gebruikerlijst = gebruikerDao.findAll(); 
     List<Student> studentlijst = new ArrayList<>(); 

     for (Gebruiker s : gebruikerlijst) { 
      if (s instanceof Student){ 
       Student student = (Student)s; 
       if(student.getLokaal() != null) 
       { 
        studentlijst.add(student); 
       } 
      } 
     } 
     // there is more but it just checks for if a timeslot is available in our planning 

Đây là tập xuân-an ninh của chúng tôi :

<beans:beans xmlns="http://www.springframework.org/schema/security" 
     xmlns:beans="http://www.springframework.org/schema/beans" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" 
      http://www.springframework.org/schema/security 
      http://www.springframework.org/schema/security/spring-security-3.1.xsd 
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> 

<beans:import resource="applicationContext.xml"/> 

<http auto-config="true"> 
    <intercept-url pattern="/admin*" access="hasAnyRole('ROLE_Student', 'ROLE_Promotor', 'ROLE_Coordinator')"/> 
    <logout logout-success-url="/planning.htm"/> 
    <access-denied-handler ref="accessDeniedHandler"/> 
    <remember-me/> 
</http> 

<authentication-manager> 
    <authentication-provider> 
     <password-encoder hash="sha-256"/> 
     <jdbc-user-service data-source-ref="dataSource" 
          users-by-username-query="select StamNummer, WachtwoordEncrypted, 'true' as enabled from gebruiker where StamNummer=?" 
          authorities-by-username-query="select StamNummer, Type as authority from gebruiker where StamNummer=?" 
          role-prefix="ROLE_" 
     /> 
    </authentication-provider> 
</authentication-manager> 

<beans:bean class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler"/> 

Đây là tập tin applicationContext của chúng tôi:

<?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:p="http://www.springframework.org/schema/p" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> 

    <bean name = "GebruikerDAO" class="services.JpaGebruikerDao"/> 
</beans> 

Đây là tập tin phối-servlet của chúng tôi:

<?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:p="http://www.springframework.org/schema/p" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.1.xsd 
http://www.springframework.org/schema/jee 
http://www.springframework.org/schema/jee/spring-jee-3.1.xsd"> 

<mvc:annotation-driven /> 
<context:component-scan base-package="controller"/> 
<context:component-scan base-package="services"/> 

<bean id="accessDeniedHandler" class="handler.MyAccessDeniedHandler"> 
    <property name="accessDeniedUrl" value="403"/> 
</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:3306/bachelorproef"/> <!-- jdbc:mysql://localhost:3306/mysql?zeroDateTimeBehavior=convertToNull--> 
    <property name="username" value="root"/> 
    <property name="password" value="root"/> 
</bean> 
<bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan"> 
     <list> 
      <value>domein</value> 
     </list> 
    </property> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="showSql" value="true" /> 
      <property name="generateDdl" value="true" /> 
      <property name="database" value="MYSQL"/> 
     </bean> 
    </property> 
</bean> 

<bean id="transactionManager" 
     class=" org.springframework.orm.jpa.JpaTransactionManager "> 
    <constructor-arg ref="entityManagerFactory" /> 
</bean> 

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

<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
     p:prefix="/WEB-INF/jsp/" 
     p:suffix=".jsp" /> 
</beans> 

Đây là file web.xml của chúng tôi:

<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web- app_2_4.xsd"> 
<display-name>Spring MVC Application</display-name> 
<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/dispatcher-servlet.xml, 
          /WEB-INF/spring-security2.xml 
    </param-value> 
</context-param> 
<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
</web-app> 

Đây là Gebruiker của chúng tôi lớp:

@Entity 
@Table(name = "gebruiker") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "Type") 
public abstract class Gebruiker implements Serializable { 

@Id 
@Column(name = "StamNummer") 
private String stamNummer; 
@Column(name = "Familienaam") 
private String familienaam; 
@Column(name = "Voornaam") 
private String voornaam; 
@Column(name = "Email") 
private String email; 
@Column(name = "Wachtwoord") 
private String wachtwoord; 
@Column(name = "Campus") 
private String campus; 
@Transient 
private String naam; 

public Gebruiker() { 

} 
(+ some extra getters, setters and generatePassword methods) 

Đây là class Student của chúng tôi:

@Entity 
@DiscriminatorValue("Student") 
public class Student extends Gebruiker{ 

@ManyToOne 
private Promotor promotor; 

@OneToOne 
@JoinColumn(name = "HuidigDossier_DossierId") 
private Dossier dossier; 

@Temporal(TemporalType.TIMESTAMP) 
private Date datumPresentatie; 

private String lokaal; 
(+ some getters, setters and toString) 

Đây là lớp Promotor của chúng tôi:

@Entity 
@DiscriminatorValue("Promotor") 
public class Promotor extends Gebruiker { 

    @OneToMany(mappedBy="promotor") 
    List<Student> studenten; 

    public Promotor(){ 
     studenten = new ArrayList<>(); 
    } 

    public List<Student> getStudenten() { 
     return studenten; 
    } 

    public void setStudenten(List<Student> studenten) { 
     this.studenten = studenten; 
    } 

} 

Đây là lớp BPCoordinator của chúng tôi:

@Entity 
@DiscriminatorValue("Coordinator") 
public class BPCoordinator extends Gebruiker{ 

    public BPCoordinator(){ 

    } 
} 

tôi biết có rất nhiều thông tin được tìm thấy nếu NoUniqueBeanDefinitionException lỗi xảy ra, nhưng điều này gần như luôn luôn đề cập đến entityManager, ở đây ông nói cả gebruikerDAO và GebruikerDAO hoặc một cái gì đó được tìm thấy và chúng tôi không có ý tưởng nơi ông được họ từ hoặc tại sao lỗi này xảy ra. Hầu hết các mã này đã được gần như hoàn toàn sao chép dán từ các trường học khác và paperbackcode (khóa học của chúng tôi đưa cho chúng tôi bởi chúng tôi lectors)

Ý tưởng ở đâu và làm thế nào để khắc phục vấn đề sẽ là tuyệt vời.

Trả lời

13

Xóa <bean name = "GebruikerDAO" class="services.JpaGebruikerDao"/> khỏi cấu hình XML (và nếu đó là tất cả những gì tồn tại trong cấu hình, tôi khuyên bạn nên xóa toàn bộ tệp).

này là cần thiết vì JpaGebruikerDao đang được đăng ký như là một (Repository) đậu qua quét thành phần (dưới tên gebruikerDAO).

+0

chúng tôi chúa tể và đấng cứu thế, geoand, giải pháp của bạn cố định i của chúng tôi Vấn đề và khiến chúng tôi có thể đăng nhập một cách hoàn hảo :) Tuy nhiên, vì dải mã này được chúng tôi đưa ra và cô ấy đã kiểm tra tất cả các tệp trong suốt thời gian chờ hàng tuần với cô ấy ... Vậy phải, cô ấy đã bỏ qua tôi đoán vậy. Sau đó, một lần nữa, bạn đá! Và vâng đây là giải pháp: p. – Tempuslight

+0

@ Jepix Tôi rất vui vì nó đã làm việc cho bạn! – geoand

+1

bất kỳ cách nào tôi có thể cung cấp cho bạn thêm tín dụng hoặc một cái gì đó ngoài hình thức upvoting giải pháp của bạn :)? – Tempuslight

1

Tháo chú thích từ lớp JpaGebruikerDao @Repository ("gebruikerDAO"), vì nó đã được đăng ký, or Remove

0

Có hai giải pháp khả thi cho ngoại lệ này. 1- Hoặc xác định các lớp duy nhất trong tập tin XML và sử dụng @Qualifier:

public class PlanningController { 

@Autowired 
@Qualifier("GebruikerDAO") 
private GebruikerDAO gebruikerDao; 

Trong XML xác định một bean cho PlanningController chỉ

2- Hoặc loại bỏ Qualifier chú thích, và thêm getter và setter hoặc constructor trong PlanningController sau đó trong XML xác định bối cảnh với bất động sản:

<bean class="[path of PlanningController]"> 
<property name="gebruikerDao" ref="[GebruikerDAO implementation bean name]"/> 

Các vấn đề liên quan