Spring Boot の HelloWorld のやり方をググってみたら、
ControllerクラスからHTMLファイルを呼び出す方法ばかりが検索結果に表示され、
Serviceクラスを単独で動かす方法が(私が見た限りで)無かったので、ここで共有します。
##環境
STS Version: 4.11.0.RELEASE
Java 11
Spring Boot 2.5.2
##準備
###プロジェクト作成
-「File」>「New」> 「Spring Starter Project」
-Nameは適当、Java Versionは「11」、Typeは「Gradle」を選択し「Next」を押下
-「Lombok」「Spring Web」「Thymeleaf」にチェックを入れ、「Finish」を押下
###Serviceクラスの作成
-
パッケージの作成
-com.example.demoパッケージを右クリック>「New」>「Package」
-Nameに「com.example.demo.service」と入力し、「Finish」を押下 -
Serviceクラスの作成
-com.example.demo.serviceパッケージを右クリック>「New」>「Class」
-Nameに「HelloServece」と入力し、「Finish」を押下 -
Serviceクラスを以下のように修正
package com.example.demo.service;
import org.springframework.stereotype.Service;
@Service
public class HelloService {
public void hello(){
System.out.println("Hello Service!!");
}
}
###Applicationクラスの修正
Applicationクラスを以下のように修正
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import com.example.demo.service.HelloService;
@SpringBootApplication
public class Demo2Application {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(Demo2Application.class, args);
HelloService service = ctx.getBean(HelloService.class);
service.hello();
}
}
ConfigurableApplicationContext
でコンテナにApplicationクラスを登録し、
HelloService service = ctx.getBean(HelloService.class);
でServiceクラスをコンテナから取得しています。
##実行
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
[32m :: Spring Boot :: [39m [2m (v2.5.2)[0;39m
[2m2021-07-16 23:38:39.879[0;39m [32m INFO[0;39m [35m141252[0;39m [2m---[0;39m [2m[ main][0;39m [36mcom.example.demo.Demo2Application [0;39m [2m:[0;39m Starting Demo2Application using Java 16.0.1 on PBPC0185 with PID 141252 (C:\Users\pbhosoda\Documents\workspace-spring-tool-suite-4-4.11.0.RELEASE\demo-2\bin\main started by pbhosoda in C:\Users\pbhosoda\Documents\workspace-spring-tool-suite-4-4.11.0.RELEASE\demo-2)
[2m2021-07-16 23:38:39.886[0;39m [32m INFO[0;39m [35m141252[0;39m [2m---[0;39m [2m[ main][0;39m [36mcom.example.demo.Demo2Application [0;39m [2m:[0;39m No active profile set, falling back to default profiles: default
[2m2021-07-16 23:38:41.052[0;39m [32m INFO[0;39m [35m141252[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.s.b.w.embedded.tomcat.TomcatWebServer [0;39m [2m:[0;39m Tomcat initialized with port(s): 8080 (http)
[2m2021-07-16 23:38:41.063[0;39m [32m INFO[0;39m [35m141252[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.apache.catalina.core.StandardService [0;39m [2m:[0;39m Starting service [Tomcat]
[2m2021-07-16 23:38:41.064[0;39m [32m INFO[0;39m [35m141252[0;39m [2m---[0;39m [2m[ main][0;39m [36morg.apache.catalina.core.StandardEngine [0;39m [2m:[0;39m Starting Servlet engine: [Apache Tomcat/9.0.48]
[2m2021-07-16 23:38:41.205[0;39m [32m INFO[0;39m [35m141252[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.a.c.c.C.[Tomcat].[localhost].[/] [0;39m [2m:[0;39m Initializing Spring embedded WebApplicationContext
[2m2021-07-16 23:38:41.205[0;39m [32m INFO[0;39m [35m141252[0;39m [2m---[0;39m [2m[ main][0;39m [36mw.s.c.ServletWebServerApplicationContext[0;39m [2m:[0;39m Root WebApplicationContext: initialization completed in 1244 ms
[2m2021-07-16 23:38:41.778[0;39m [32m INFO[0;39m [35m141252[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.s.b.w.embedded.tomcat.TomcatWebServer [0;39m [2m:[0;39m Tomcat started on port(s): 8080 (http) with context path ''
[2m2021-07-16 23:38:41.793[0;39m [32m INFO[0;39m [35m141252[0;39m [2m---[0;39m [2m[ main][0;39m [36mcom.example.demo.Demo2Application [0;39m [2m:[0;39m Started Demo2Application in 2.406 seconds (JVM running for 3.555)
Hello Service!!
いけてますね。
Applicationクラスに@Componentをつけて、@Autowiredでserviceクラスを取得すれば
いいんじゃないかと思ったのですが、それだとエラーが出ました。
原因が分かったら、また投稿しようと思います。
終わり。