spring, springmvc框架使用上的一些缺點:
需要使用的大量的組態檔
還需要設定各種物件
需要把使用的物件放入到spring容器中才能使用物件
需要了解其他框架設定規則
springboot的一些直觀優點:
SpringBoot就相當於簡化了組態檔的Spring+SpringMVC(但springboot的核心還是IOC容器)
常用的框架和第三方庫都已經設定好了, 只需要引入使用即可
可以建立spring應用
內嵌的tomcat, jetty, Undertow
提供了starter起步依賴, 簡化應用的設定:
比如使用MyBatis框架, 需要在Spring專案中, 需要設定MyBatis的物件, SqlSessionFactory以及Dao的代理物件
但在SpringBoot專案中, 只要在pom.xml裡面加入一個mybatis-spring-boot-starter依賴
儘可能去自動設定spring和第三方庫, 叫做自動設定(就是把spring中的,第三方庫中的物件都建立好,放到容器中,開發人員可以直接使用)
提供了健康檢查, 統計, 外部化設定
不用生成程式碼,不需要使用xml檔案做設定
建立springboot專案時,可能用到的地址
國外地址: https://start.spring.io
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
@Configuration
public @interface SpringBootConfiguration {
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
//說明使用了@SpringBootConfiguration註解標註的類,可以作為組態檔使用的,可以使用Bean宣告物件,注入到容器
啟用自動設定,把java物件設定好,注入到spring容器中。例如可以把mybatis的物件建立好,放入到容器中
掃描器,找到註解,根據註解的功能建立物件,給屬性賦值等等。預設掃描的包:@ComponentScan所在的類,以及其所在類所在的包和子包。
#設定埠號
server.port=9090
#設定存取應用上下文路徑,contextpath
server.servlet.context-path=/myboot
server:
port: 9090
servlet:
context-path:/myboot
實際場景中,專案的設定會有開發環境,測試環境,上線的環境
每個環境有不同的設定資訊,例如埠,上下文,資料庫url,使用者名稱,密碼等等
使用多環境組態檔,可以方便的切換不同的設定
使用方式:建立多個組態檔,名稱規則:application-環境名稱.properties(或者字尾未yml格式)
多環境組態檔的範例如下:
建立開發環境的組態檔:application-dev.properties(或者application-dev.yml )
建立測試者使用的設定:application-test.properties
springboot預設讀取application.properties檔案,故需在該檔案中設定實際需要讀取的核心組態檔
#以啟用組態檔 application-dev.properties為例
spring.profiles.active=dev
#自定義key=value
school.name=橘子
school.website=www.test.com
school.address=黑龍江哈爾濱
@Component
@ConfigurationProperties(prefix = "school")
public class SchoolInfo {
private String name;
private String website;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "SchoolInfo{" +
"name='" + name + '\'' +
", website='" + website + '\'' +
", address='" + address + '\'' +
'}';
}
}
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
<resource>
<directory>src/main/webapp</directory>
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/*.*</include>
</includes>
</resource>
#設定檢視解析器
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
return run(new Class[]{primarySource}, args);
}
public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable {
}
@FunctionalInterface
public interface CommandLineRunner {
void run(String... args) throws Exception;
}
@FunctionalInterface
public interface ApplicationRunner {
void run(ApplicationArguments args) throws Exception;
}