1. SpringBoot:SpringBootとSpringの違いを簡単に説明してください
1.1
春の紹介
つまり、Springフレームワークは、Javaアプリケーションを開発するための包括的なインフラストラクチャサポートを提供します。これには、依存関係の注入やすぐに使えるモジュールなど、いくつかの優れた機能が含まれています。
- Spring JDBC
- 春MVC
- 春のセキュリティ
- 春のAOP
- 春のオーム
- 春テスト
これらのモジュールは、アプリケーション開発時間を大幅に短縮できます。たとえば、Java Web開発の初期段階では、データソースにレコードを挿入するために多くの反復的なコードを記述する必要があります。しかし、Spring JDBCモジュールのJDBCTemplateを使用することで、いくつかの単純な構成または数行のコードに単純化できます。
2. SpringBootの紹介
Spring Bootは基本的にSpringフレームワークの拡張であり、Springアプリケーションのセットアップに必要な複雑なルーチン構成を排除します。
その目標はSpringの目標と一致しており、より高速で効率的な開発エコシステムへの道を開きます。以下は、Spring Bootの機能の一部です。
- スターターを通じてこの依存関係により、構造と複雑なアプリケーション構成を簡素化します。
- 主な機能は、直接、組み込みWebサーバーを起動して、アプリケーションのデプロイメント、メトリック測定、ヘルスチェックヘルスチェック、および外部構成の複雑さを回避できます。
- Spring関数の構成をできるだけ自動化します。
3番目に、SpringとSpringBootの比較
3.1 Mavenの依存関係
まず、SpringでWebアプリケーションを作成するために必要な最小限の依存関係を見てみましょう。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.0.RELEASE</version>
</dependency>
Springとは異なり、Spring Bootは、Webアプリケーションを起動して実行するために1つの依存関係のみを必要とします。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
ビルド中に、他のすべての依存関係が最終的なアーカイブに自動的に追加されます。
Spring Bootは、さまざまなSpringモジュールに多くのエントリの依存関係を提供します。最も一般的に使用されるものは次のとおりです。
- spring-boot-starter-data-jpa
- 春ブートスターターセキュリティ
- 春ブートスターターテスト
- 春ブートスターターウェブ
- スプリングブートスターターthymeleaf
3.2 MVC設定
SpringとSpring Bootを使用してJSP Webアプリケーションを作成するために必要な構成について説明します。
public class MyWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation("com.test.package");
container.addListener(new ContextLoaderListener(context));
ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
@EnableWebMvcアノテーションを@Configurationアノテーションクラスに追加し、コントローラーから返されたビューを解析するビューリゾルバーを定義する必要もあります。
@EnableWebMvc
@Configuration
public class ClientWebConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver bean = new InternalResourceViewResolver();
bean.setViewClass(JstlView.class);
bean.setPrefix("/WEB-INF/view/");
bean.setSuffix(".jsp");
return bean;
}
}
これらすべてと比較して、Spring Boot Webスターターを追加すると、Spring Bootは上記のことを適切に機能させるためにいくつかのプロパティのみを必要とします。
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
- 上記のすべてのSpring構成は、自動構成と呼ばれるプロセスを介してBoot Webスターターを追加することで自動的に含まれます。
つまり、Spring Bootは、アプリケーションに存在する依存関係、プロパティ、およびBeanを自動的にスキャンし、これらに基づいて対応する構成を有効にします。
3.3テンプレートエンジンの設定
SpringとSpring BootでThymeleafテンプレートエンジンを構成する方法を見てみましょう。2つの違いは何ですか?
Springでは、thymeleaf-spring5の依存関係といくつかの構成をビューリゾルバーに追加する必要があります。
@Configuration
@EnableWebMvc
public class MvcWebConfig implements WebMvcConfigurer {
@Autowired
private ApplicationContext applicationContext;
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setApplicationContext(applicationContext);
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.setEnableSpringELCompiler(true);
return templateEngine;
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
registry.viewResolver(resolver);
}
}
- Spring Bootは、WebアプリケーションでThymeleafサポートを有効にするために、spring-boot-starter-thymeleafの依存関係のみを必要とします。
依存関係が正常に追加されたら、テンプレートをsrc / main / resources / templatesフォルダーに追加すると、Spring Bootが自動的にそれらを表示します。
3.4セキュリティ構成
簡単にするために、SpringおよびSpring Bootフレームワークを使用してデフォルトのHTTP基本認証を有効にする方法を説明します。
まず、Springを使用してセキュリティを有効にするために必要な依存関係と構成を見てみましょう。
Springでは、アプリケーションにセキュリティを設定するために、標準のspring-security-webおよびspring-security-config依存関係が必要です。
次に、WebSecurityConfigurerAdapterを拡張するクラスを追加し、@ EnableWebSecurityアノテーションを使用する必要があります。
@Configuration
@EnableWebSecurity
public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user1")
.password(passwordEncoder().encode("user1Pass"))
.authorities("ROLE_USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
同様に、Spring Bootが機能するには、これらの依存関係が必要です。しかし、spring-boot-starter-securityの依存関係を定義するだけで済み、クラスパスにすべての関連する依存関係が自動的に追加されます。
3.5アプリケーションのブートストラップ
SpringとSpring Bootのアプリケーションブートストラップの基本的な違いは、サーブレットにあります。
Springは、web.xmlまたはSpringServletContainerInitializerをブートエントリポイントとして使用します。
Springブートは、プログラムのブートにサーブレット3のみを使用します。
まず春のブーツについて話しましょう
方法1:web.xmlガイドメソッド
- サーブレットコンテナー(サーバー)がweb.xmlを読み取る
- web.xmlで定義されたDispatcherServletは、コンテナによってインスタンス化されます
- DispatcherServletは、WEB-INF / {servletName} -servlet.xmlを読み取ることによってWebApplicationContextを作成します
- 最後に、DispatcherServletはアプリケーションコンテキストで定義されたBeanを登録します
方法2:サーブレット3+ガイド方式
- コンテナはServletContainerInitializerを実装するクラスを検索して実行します
- SpringServletContainerInitializerは、実装クラスWebApplicationInitializerのサブクラスを見つけます。
- WebApplicationInitializerは、XMLまたはコンテキスト@Configurationクラスを使用してセッションを作成します
- WebApplicationInitializerは、以前に作成されたコンテキストを使用してDispatcherServletを作成します。
Spring Boot bootについて話しましょう
Spring Bootアプリケーションのエントリポイントは、@ SpringBootApplicationで注釈されたクラスです。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
デフォルトでは、Spring Bootは埋め込みコンテナーを使用してアプリケーションを実行します。この場合、Spring Bootはpublic static void mainエントリポイントを使用して、埋め込みWebサーバーを起動します。
さらに、サーブレット、フィルター、およびServletContextInitializer Beanをアプリケーションコンテキストから埋め込みサーブレットコンテナーにバインドする役割もあります。
Spring Bootのもう1つの機能は、同じパッケージ内のすべてのクラスまたはMainクラスのサブパッケージ内のコンポーネントを自動的にスキャンすることです。
Spring Bootには、外部コンテナーにWebアーカイブとしてデプロイするオプションがあります。この場合、SpringBootServletInitializerを拡張する必要があります。
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
// ...
}
外部サーブレットコンテナーは、WebアーカイブファイルのMETA-INFファイルで定義されたMainクラスを探します。SpringBootServletInitializerは、サーブレット、フィルター、およびServletContextInitializerをバインドします。
3.6パッケージ化と展開
最後に、アプリケーションをパッケージ化してデプロイする方法を見てみましょう。どちらのフレームワークも、MavenやGradleなどの一般的なパッケージ管理テクノロジーをサポートしています。しかし、展開に関しては、これらのフレームワークは大きく異なります。
たとえば、Spring Boot Mavenプラグインは、MavenでSpring Bootサポートを提供します。また、実行可能なjarまたはwarアーカイブをパッケージ化し、アプリケーションを「インプレース」で実行することもできます。
Springと比較して、デプロイメント環境でのSpring Bootの利点には以下が含まれます
- 埋め込みコンテナサポートを提供する
- コマンドjava -jarを使用して、jarを個別に実行します
- 外部コンテナーにデプロイする場合、jarの競合の可能性を回避するために依存関係を除外することを選択できます
- 展開中に構成ファイルを指定するための柔軟なオプション
- 統合テスト用のランダムポート生成
4、まとめ:
要約すると、Spring Bootは、Spring自体の拡張にすぎず、開発、テスト、およびデプロイメントをより便利にします。
目次
1. SpringBoot:SpringBootとSpringの違いを簡単に説明してください