2017-08-28 10 views
0

私はspring-mvcの新しいコーナーです。私はspring-mvc、hibernate、mysql、jsfを使ってテストプロジェクトを開発するための良いチュートリアルを見つけようとしました。最後にサンプルプロジェクトを作成しました。名前 'managedBeanClass'を持つBeanの作成中にエラーが発生しました:フィールド 'person'で表される満足度の低い依存関係:

Here

はこの春、MVC構造

ですが、残念ながらそれはエラー上記のショーだ、私のプロジェクト

私の最初の質問があるのキャプチャです。

applicationContext.xmlを

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 
    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/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> 

     <context:annotation-config /> 

     <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
      <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
      <beans:property name="url" 
       value="jdbc:mysql://localhost:3306/vehicles" /> 
      <beans:property name="username" value="root" /> 
      <beans:property name="password" value="root" /> 
     </beans:bean> 

     <!-- Hibernate 4 SessionFactory Bean definition --> 
     <beans:bean id="hibernate4AnnotatedSessionFactory" 
      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
      <beans:property name="dataSource" ref="dataSource" /> 
      <beans:property name="annotatedClasses"> 
       <beans:list> 
        <beans:value>com.journaldev.springhibernate.model.Person</beans:value> 
       </beans:list> 
      </beans:property> 
      <beans:property name="hibernateProperties"> 
       <beans:props> 
        <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect 
        </beans:prop> 
        <beans:prop key="hibernate.show_sql">true</beans:prop> 
       </beans:props> 
      </beans:property> 
     </beans:bean> 



     <context:component-scan base-package="com.journaldev" /> 

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

     <beans:bean id="transactionManager" 
      class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
      <beans:property name="sessionFactory" 
       ref="hibernate4AnnotatedSessionFactory" /> 
     </beans:bean> 

</beans:beans> 

面-config.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config version="2.2" 
       xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
       http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"> 

    <application> 
     <el-resolver> 
      org.springframework.web.jsf.el.SpringBeanFacesELResolver 
     </el-resolver> 
    </application> 

</faces-config> 

のweb.xml

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

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

    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>/test/*</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 

</web-app> 

Personクラス

@Entity 
@Table(name="PERSON") 
public class Person { 
@Id 
@Column(name="id") 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
private int id; 

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

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

public int getId() { 
    return id; 
} 

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

public String getName() { 
    return name; 
} 

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

public String getCountry() { 
    return country; 
} 

public void setCountry(String country) { 
    this.country = country; 
} 

@Override 
public String toString(){ 
    return "id="+id+", name="+name+", country="+country; 
} 
} 

PersonDAOImplクラス

@Repository 
public class PersonDAOImpl implements PersonDAO{ 

private static final Logger logger = 
LoggerFactory.getLogger(PersonDAOImpl.class); 

private SessionFactory sessionFactory; 

public void setSessionFactory(SessionFactory sf){ 
    this.sessionFactory = sf; 
} 

@Override 
public void addPerson(Person p) { 
    Session session = this.sessionFactory.getCurrentSession(); 
    session.persist(p); 
    logger.info("Person saved successfully, Person Details="+p); 
} 

} 

PersonServiceImplクラス

@Service 
public class PersonServiceImpl implements PersonService { 

@Autowired 
private PersonDAO personDAO; 

@Override 
@Transactional 
public void addPerson(Person p) { 
    personDAO.addPerson(p); 
} 
} 

ManagedBeanClassクラス

@ManagedBean("managedBeanClass") 
@ViewScoped 
public class ManagedBeanClass implements Serializable{ 

@Autowired 
private Person person; 

@Autowired 
private PersonService personServiceImpl; 

public void addPersion(){ 
    personServiceImpl.addPerson(person); 

} 

public Person getPerson() { 
    return person; 
} 

public void setPerson(Person person) { 
    this.person = person; 
} 

} 

エラーは私に答えを与えてください、

WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'managedBeanClass': Unsatisfied dependency expressed through field 'person': No qualifying bean of type [com.journaldev.springhibernate.model.Person] found for dependency [com.journaldev.springhibernate.model.Person]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.journaldev.springhibernate.model.Person] found for dependency [com.journaldev.springhibernate.model.Person]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
Aug 28, 2017 5:04:46 PM org.springframework.web.context.ContextLoader initWebApplicationContext 
SEVERE: Context initialization failed 
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'managedBeanClass': Unsatisfied dependency expressed through field 'person': No qualifying bean of type [com.journaldev.springhibernate.model.Person] found for dependency [com.journaldev.springhibernate.model.Person]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.journaldev.springhibernate.model.Person] found for dependency [com.journaldev.springhibernate.model.Person]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.journaldev.springhibernate.model.Person] found for dependency [com.journaldev.springhibernate.model.Person]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1406) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1057) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566) 
    ... 24 more 

です。私はこれを長い間試みてきました。私は春を使ってプロジェクトを作ることができます。しかし、spring-mvc@Autowired注釈で構築する必要があります。

+0

...あなたが実際にそれらを混ぜていますか? – Kukeltje

+0

@kukeltjeありがとうございます。私はあなたが何を言っているのか分かりません。私はこれについてもっと知りません。私はこれに間違っていますか? – Dev4World

+0

https://stackoverflow.com/questions/18744910/using-jsf-as-view-technology-of-spring-mvc – Kukeltje

答えて

1

ManagedBeanClassクラスでは、エンティティをオートワイヤーしようとします。エンティティはautowire候補ではありません。

変更

@Autowired 
private Person person; 

     to 

private Person person = new Person(); 

はいあなたは春がプロトタイプはエンティティのインスタンスをスコープ作成できるように@Autowireを使用することができますするクラス。しかし、エンティティはManagedBeanClassの依存関係でもコンテキストでもなく、ManagedBeanClassのモデルであるため汚いです。ManagedBeanClassは、モデル自体を作成することができなければならず(MUST)、Springがそれを処理することはできません(MUST)。

とにかく、この汚れた解決策が好きです。

エンティティがcom.journaldevのパッケージにされたと仮定すると、エンティティにこれを追加します。

@Bean               <-new 
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)    <-new 

@Entity 
@Table(name="PERSON") 
public class Person { 
春MVCとJSFは一種の技術を競合している
+0

Peterに感謝します。その大丈夫なので、どのように@Autowiredアノテーションを春に使うことができますか? – Dev4World

+0

私は@AutowiredアノテーションをプライベートPersonの人では使用する必要がありますperson = new Person(); – Dev4World

+0

@ Dev4Worldあなたは本当にフィールド「final」と値「null」を作るべきです。 –

関連する問題