SpringBoot--springboot啓動類和controller的配置

做爲一個springboot初學者,在探索過程當中不免遇到一些坑,邊看書邊動手,發現書本中的版本是1.0,而我使用的是最新版2.0,因此有些東西不能徹底按照書本進行操做,由於2.0中已經不支持1.0中的部分配置了,好比2.0中的註解@SpringBootApplication是註解@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan的組合,而1.0中它是@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan等。並且在入門教程中將啓動類和controller放在同一個類中,可是這樣的配置隨着業務的擴展controller會愈來愈多,隨之而來的問題就是啓動類愈來愈大,考慮到這點,我想將啓動類和controller分開配置,參考網絡資源,並在一番惡鬥以後終於實現了這個想法,由於遇到了一些坑,因此必須記錄下來!!java

1、controller和啓動類在同一個class中spring

使用IntellJ IDEA建立springboot項目時,會在默認的包下自動建立一個*Application.java的類,其中*通常是artifact名稱,即項目名稱,而後能夠直接在這個類中配置controller並使用這個類啓動項目。springboot

@Controller @SpringBootApplication public class WebdemoApplication {

    @RequestMapping("/")
    public String index(Model model) {
        Person person = new Person("張三", 26);

        List<Person> people = new ArrayList<>();
        Person p1 = new Person("李四", 27);
        Person p2 = new Person("王五", 27);
        Person p3 = new Person("趙六", 27);
        people.add(p1);
        people.add(p2);
        people.add(p3);

        model.addAttribute("singlePerson", person);
        model.addAttribute("people", people);
        return "/hello/index";
    }

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

這就是將controller和啓動類放在一個類中的配置,直接點右鍵運行這個類就能夠訪問了!網絡

2、將controller和啓動類分開配置mvc

由於將controller和啓動類分開,因此首先要新建一個controller類app

@Controller
public class HelloController {

    @RequestMapping("/hello")
    public String index(Model model) {
        Person person = new Person("張三", 26);

        List<Person> people = new ArrayList<>();
        Person p1 = new Person("李四", 27);
        Person p2 = new Person("王五", 27);
        Person p3 = new Person("趙六", 27);
        people.add(p1);
        people.add(p2);
        people.add(p3);

        model.addAttribute("singlePerson", person);
        model.addAttribute("people", people);
        return "/hello/index";
    }
}

我不改變啓動類的位置,可是啓動類中只要一個main方法便可,以下:spa

@SpringBootApplication
public class MyWebdemoApplication {

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

此時不改變啓動類位置,目錄以下:code

此時我訪問http://127.0.0.1:8080/hello時老是包404,排除視圖文件的因素以後我將啓動類放到com.hyc下,目錄以下:blog

此時再重啓服務,訪問http://127.0.0.1:8080/hello時才正常了!教程

因此這種方式必定要將啓動類放在root目錄下,這樣才能掃描到controller、service,若是想讓啓動類放在任何地方都生效的話,可使用下面的配置方法

@ComponentScan(basePackages = {"com.hyc"})
@SpringBootApplication
public class WebdemoApplication {

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

這種方法中,controller不變,啓動類放在任意包下面,我是放在建立項目默認包中,這樣只需在啓動類上增長註解@ComponentScan便可,其中的(basePackages = {"com.hyc"})是須要掃描的包名,能夠是多個,如(basePackages = {"com.hyc.controller","com.hyc.service"})等,這就意味着mvc容器會去這些包下面掃描,進而找到controller等資源。

3、總結

綜上所述,springboot的配置有如下三種:

一、當啓動類和controller在同一類中時,須要在該類上添加註解@Controller;

二、當啓動類和controller分開時,啓動類要放在根目錄下,啓動類上只有註解@SpringBootApplication;

三、當啓動類和controller分開時,若是啓動類在某個包下,須要在啓動類中增長註解@ComponentScan,配置須要掃描的包名;

相關文章
相關標籤/搜索