2016-05-02 25 views
0

私はこのspring-lemon Getting Startedチュートリアル(https://naturalprogrammer.gitbooks.io/spring-lemon-getting-started/content/index.html)に従おうとしていますが、それ以上のことはできません。 私は新しいスプリングスタータープロジェクト(スプリングブート)を作成しました。スプリングレモンを追加することができました。私は指示に従うより他に何もしなかったが、私はMavenのビルドを開始したとき、テストは次のエラーで失敗しました:春レモンBeanCurrentlyInCreationException:Beanを作成中にエラーが発生しました

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lmnDemoController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.naturalprogrammer.spring.lemon.LemonController.setLemonService(com.naturalprogrammer.spring.lemon.LemonService); nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'lmnDemoService': Bean with name 'lmnDemoService' has been injected into other beans [authenticationSuccessHandler] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example.

マイLmnDemoService.javaは次のとおりです。

package com.example; 

import org.springframework.stereotype.Service; 
import com.naturalprogrammer.spring.lemon.LemonService; 

@Service 
public class LmnDemoService extends LemonService<User, Long> { 
    @Override 
    protected User newUser() { 
     return new User(); 
    } 
} 

それはちょうどライン他に何もしていますチュートリアルは言う。私は何が欠けていますか?

EDIT:

LmndemoApplication.java

package com.example; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import com.naturalprogrammer.spring.lemon.LemonConfig; 

@SpringBootApplication(scanBasePackageClasses = {LmndemoApplication.class, LemonConfig.class}) 
public class LmndemoApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(LmndemoApplication.class, args); 
    } 
} 

LmnDemoController.java

package com.example; 

import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 

import com.naturalprogrammer.spring.lemon.LemonController; 

@RestController 
@RequestMapping("/api/core") 
public class LmnDemoController extends LemonController<User, Long> { 

} 

LmnDemoService.java

package com.example; 

import org.springframework.stereotype.Service; 

import com.naturalprogrammer.spring.lemon.LemonService; 

@Service 
public class LmnDemoService extends LemonService<User, Long> { 

    @Override 
    protected User newUser() { 
     return new User(); 
    } 
} 

SecurityConfig.java

package com.example; 

import org.springframework.context.annotation.Configuration; 

import com.naturalprogrammer.spring.lemon.security.LemonSecurityConfig; 

@Configuration 
public class SecurityConfig extends LemonSecurityConfig { 

} 

ServletInitializer.java

package com.example; 

import org.springframework.boot.builder.SpringApplicationBuilder; 
import org.springframework.boot.context.web.SpringBootServletInitializer; 

public class ServletInitializer extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(LmndemoApplication.class); 
    } 

} 

User.java

package com.example; 

import javax.persistence.Entity; 
import javax.persistence.Table; 

import com.naturalprogrammer.spring.lemon.domain.AbstractUser; 

@Entity 
@Table(name="usr") 
public class User extends AbstractUser<User,Long> { 

    private static final long serialVersionUID = 2716710947175132319L; 

} 

UserRepository.java

package com.example; 

import com.naturalprogrammer.spring.lemon.domain.AbstractUserRepository; 

public interface UserRepository extends AbstractUserRepository<User, Long> { 

} 

application.properties

#Database configuration 
spring.jpa.database: MYSQL 
spring.jpa.hibernate.ddl-auto: update 

spring.datasource.url: jdbc:mysql://localhost:3306/mydatabase 
spring.datasource.username: myuser 
spring.datasource.password: mypassword 

#DevTools configuration 
spring.devtools.livereload.enabled: false 
spring.devtools.restart.enabled: false 

#Application URL 
#lemon.application-url: http://localhost:9000 

#reCAPTCHA configuration 
#lemon.recaptcha.sitekey: your google recaptcha site key 
#lemon.recaptcha.secretkey: your google recaptcha secret key 

#Remember me configuration 
#lemon.remember-me-key: someSecret 

#First administrator 
lemon.admin.username: [email protected] 
lemon.admin.password: admin 

#Email configuration 
#spring.mail.host = smtp.gmail.com 
#spring.mail.username = [email protected] 
#spring.mail.password = xxxxxx 
# 
#spring.mail.properties.mail.smtp.auth = true 
#spring.mail.properties.mail.smtp.socketFactory.port = 465 
#spring.mail.properties.mail.smtp.socketFactory.class =  javax.net.ssl.SSLSocketFactory 
#spring.mail.properties.mail.smtp.socketFactory.fallback = false 
#spring.mail.properties.mail.smtp.ssl.enable = true 

#Handling cross origin requests configuration 
#lemon.cors.allowed-origins: http://localhost:9000 

#This will disable the protection against JSON vulnerability 
#lemon.enabled.json-prefix: false 

pom.xml

http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0

<groupId>com.example</groupId> 
<artifactId>demo</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>war</packaging> 

<name>lmndemo</name> 
<description>Demo project for Spring Boot</description> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.3.RELEASE</version> 
    <relativePath/> <!-- lookup parent from repository --> 
</parent> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.version>1.8</java.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <!-- Spring-lemon --> 
    <dependency> 
     <groupId>com.naturalprogrammer.spring</groupId> 
     <artifactId>spring-lemon</artifactId> 
     <version>0.8.5</version><!-- See https://github.com/naturalprogrammer/spring-lemon/releases for latest release --> 
    </dependency> 
</dependencies> 

<build> 
    <finalName>lmndemo</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

答えて

0

ルックス循環参照問題のようなものです。私の環境では起こっていません。春はそれを解決できるはずですが、春のレモンコードを修正してより頑強にするのがベストだと思います。

AuthenticationSuccessHandlerクラスのsetLemonServiceメソッドで、@Lazyアノテーションを追加してみてください。あなたのワークスペースのチェックアウトされたSpring Lemonコードにありますか?それは以下のように見えるように:

@Autowired 
@Lazy // add this line 
public void setLemonService(LemonService<?, ?> lemonService) { 
    this.lemonService = lemonService; 
} 

私は前@Lazy試していないが、私はそれが動作するはずだと思います。もしそうでなければ、我々は循環依存を壊す別の方法を考える必要があります。

私に知らせてください。解決策が見つかったら、私はSpring Lemonリポジトリへの修正をチェックインします。

+0

残念ながら、それは動作しません。同じエラーが発生します。私は認識できない最初のもので間違っていたかどうかをチェックする別のプロジェクトも試しましたが、同じことが起こりました。私は瓶と戦争の両方の包装でそれを試しました。 – Siriann

+0

問題を示す最小限のプロジェクトを共有できれば、自分のマシンで実行してみることができます。 – Sanjay

+0

ソースファイルをここに貼り付けるか、完全なプロジェクトをどこかにアップロードしますか?最初のファイルの場合、この場合、どのファイルが面白いでしょうか? – Siriann

関連する問題