2016-12-07 56 views
0

我正試圖做一個新的簡單的Spring啓動應用程序演示依賴注入。我想用@Autowired註解導入bean。使用基於java的批註的彈簧汽車電線豆

這是我的代碼樣品片

---- ---- Example.class

package com.example.project; 


import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.*; 
import org.springframework.boot.autoconfigure.*; 
import org.springframework.web.bind.annotation.*; 

@RestController 
@EnableAutoConfiguration 
public class Example { 


    @Autowired 
    public myBean first; 

    @RequestMapping("/") 
    String home() { 
     return "Hello World!"; 
    } 

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

} 

---- ---- myBean.class

package com.example.project; 

public class myBean { 

    myBean() 
    { 
     System.out.println("Hi myBean Constructed"); 
    } 
} 

--- BeanConfiguration.class ---

package com.example.project; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.ComponentScan; 

@Configuration 
@ComponentScan(basePackages = "com.example.project") 
public class BeanConfigurationClass { 

    @Bean 
    public myBean getBean() 
    { 
     return new myBean(); 

    } 
} 

--pom.xml ---

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>example</groupId> 
    <artifactId>1</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.2.RELEASE</version> 
    </parent> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
       <version>1.2.5.RELEASE</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>repackage</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
    </dependencies> 
</project> 

但是當我嘗試運行應用程序是無法找到豆和第一提供了以下錯誤 場com.example.project.Example需要一個bean無法找到類型爲「com.example.project.myBean」的類型。

我也嘗試使用基於xml的配置,但面臨同樣的錯誤。 這裏有什麼根本性的錯誤。

感謝您的期待。

+0

嘗試添加公共訪問器構造爲myBean,從控制器中刪除@EnableAutoConfiguration和移動BeanConfigurationClass – kuhajeyan

回答

1
  1. @EnableAutoConfiguration從控制器移動到您的主應用程序類。
  2. 擺脫BeanConfigurationClass
  3. 添加春季DI類註釋的一個上myBean類:

    @Component 
    public class myBean { 
    
        myBean(){ 
         System.out.println("Hi myBean Constructed"); 
        } 
    } 
    
+0

主應用程序類和控制器類是相同的。我需要讓他們與衆不同嗎?如果它們是不同的,我想我只是需要從我的主類呼叫控制器類對象,請糾正我,如果我錯了, –

+0

這不是有效的答案。你是什​​麼意思擺脫BeanConfigurationClass?也爲你的答案添加解釋。 – ScanQR

+0

從上面的方法我得到以下錯誤: 無法啓動嵌入式容器;嵌套的例外是org.springframework.context.ApplicationContextException:無法啓動EmbeddedWebApplicationContext由於缺少EmbeddedServletContainerFactory豆。 –

0

類的名稱必須以大寫字母開始!必須是「我的豆」 ..

0

你應該儘量做到以下,

移動@EnableAutoConfiguration從控制器到您的主應用程序類,即BeanConfigurationClass。這是因爲BeanConfigurationClass是您的配置文件,並且所有與配置相關的註釋都應放置在此位置。

也可以將myBean重命名爲MyBean並用@Component註釋進行註釋。

編輯:從您的BeanConfigurationClass刪除以下注釋,並只添加這一個@SpringBootApplication它會照顧所有刪除的人。

@Configuration 
@ComponentScan 
@EnableAutoConfiguration 

添加爲,

@SpringBootApplication 
BeanConfigurationClass 
+0

嘿,我試過但沒有運氣。 我收到以下錯誤: 無法啓動嵌入容器;嵌套的例外是org.springframework.context.ApplicationContextException:無法啓動EmbeddedWebApplicationContext由於缺少EmbeddedServletContainerFactory豆。 –

+0

@GauravJuneja確保您已將相關的依賴項添加到您的構建文件中。 – ScanQR

+0

BeanConfigurationClass中的MyBean方法應該被稱爲Bean或組件? 也MyBean.class應該註釋的東西? –