diff --git a/cache/build.gradle.kts b/cache/build.gradle.kts new file mode 100644 index 0000000..b827da5 --- /dev/null +++ b/cache/build.gradle.kts @@ -0,0 +1,31 @@ +/* + * Spring-boot Examples + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +plugins { + id("elex-spring-boot") + + id("org.springframework.boot") version "2.5.3" + id("io.spring.dependency-management") version "1.0.11.RELEASE" +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-web") + implementation("org.springframework.boot:spring-boot-starter-mustache") + + implementation("org.springframework.boot:spring-boot-starter-cache") + implementation ("org.springframework.boot:spring-boot-starter-data-jpa") + runtimeOnly("com.h2database:h2") + + compileOnly("org.projectlombok:lombok") + developmentOnly("org.springframework.boot:spring-boot-devtools") + + annotationProcessor("org.springframework.boot:spring-boot-configuration-processor") + annotationProcessor("org.projectlombok:lombok") + + testImplementation("org.springframework.boot:spring-boot-starter-test") + +} diff --git a/cache/src/main/java/kr/pe/elex/examples/Application.java b/cache/src/main/java/kr/pe/elex/examples/Application.java new file mode 100644 index 0000000..d3b2a7f --- /dev/null +++ b/cache/src/main/java/kr/pe/elex/examples/Application.java @@ -0,0 +1,45 @@ +/* + * Spring-boot Examples + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.stereotype.Component; + +@SpringBootApplication +@EnableCaching +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + @Component + public class MyRunner implements CommandLineRunner { + @Autowired + private PersonRepository repository; + + @Override + public void run(String... args) throws Exception { + repository.deleteAll(); + + Person charlie = new Person(); + charlie.setName("Charlie"); + charlie.setAge(11); + repository.save(charlie); + + Person steve = new Person(); + steve.setName("Steve"); + steve.setAge(34); + repository.save(steve); + } + } +} diff --git a/cache/src/main/java/kr/pe/elex/examples/Config.java b/cache/src/main/java/kr/pe/elex/examples/Config.java new file mode 100644 index 0000000..d9ccf11 --- /dev/null +++ b/cache/src/main/java/kr/pe/elex/examples/Config.java @@ -0,0 +1,9 @@ +package kr.pe.elex.examples; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; + +@Slf4j +@Configuration +public class Config { +} diff --git a/cache/src/main/java/kr/pe/elex/examples/MyController.java b/cache/src/main/java/kr/pe/elex/examples/MyController.java new file mode 100644 index 0000000..aeac49d --- /dev/null +++ b/cache/src/main/java/kr/pe/elex/examples/MyController.java @@ -0,0 +1,34 @@ +/* + * Spring-boot Examples + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.Resource; +import org.springframework.http.ContentDisposition; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +@Slf4j +@RestController +public class MyController { + @Autowired + private MyService service; + + @GetMapping(path = {"/{id}"}) + public ResponseEntity index(@PathVariable Long id) { + return ResponseEntity.of(service.getItem(id)); + } + +} diff --git a/cache/src/main/java/kr/pe/elex/examples/MyService.java b/cache/src/main/java/kr/pe/elex/examples/MyService.java new file mode 100644 index 0000000..485a9ed --- /dev/null +++ b/cache/src/main/java/kr/pe/elex/examples/MyService.java @@ -0,0 +1,28 @@ +package kr.pe.elex.examples; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Slf4j +@Service +public class MyService { + @Autowired + private PersonRepository repository; + + @Cacheable("person") + public Optional getItem(long at) { + log.info("Calling a repository method!"); + return repository.findById(at); + } + + public void addItem(Person item) { + repository.save(item); + } +} diff --git a/cache/src/main/java/kr/pe/elex/examples/Person.java b/cache/src/main/java/kr/pe/elex/examples/Person.java new file mode 100644 index 0000000..82d1aff --- /dev/null +++ b/cache/src/main/java/kr/pe/elex/examples/Person.java @@ -0,0 +1,18 @@ +package kr.pe.elex.examples; + +import lombok.*; + +import javax.persistence.*; + +@Entity +@Getter @Setter @ToString +@NoArgsConstructor @AllArgsConstructor +public class Person { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long id; + @Column + private String name; + @Column + private int age; +} diff --git a/cache/src/main/java/kr/pe/elex/examples/PersonRepository.java b/cache/src/main/java/kr/pe/elex/examples/PersonRepository.java new file mode 100644 index 0000000..9841198 --- /dev/null +++ b/cache/src/main/java/kr/pe/elex/examples/PersonRepository.java @@ -0,0 +1,8 @@ +package kr.pe.elex.examples; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PersonRepository extends JpaRepository { +} diff --git a/cache/src/main/java/kr/pe/elex/examples/package-info.java b/cache/src/main/java/kr/pe/elex/examples/package-info.java new file mode 100644 index 0000000..ce9cc62 --- /dev/null +++ b/cache/src/main/java/kr/pe/elex/examples/package-info.java @@ -0,0 +1,8 @@ +/* + * Spring-boot Examples + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; diff --git a/cache/src/main/resources/application.yaml b/cache/src/main/resources/application.yaml new file mode 100644 index 0000000..862cab6 --- /dev/null +++ b/cache/src/main/resources/application.yaml @@ -0,0 +1,17 @@ +spring: + application: + name: My spring-boot project + mustache: + expose-request-attributes: true + h2: + console: + enabled: true + datasource: + url: jdbc:h2:mem:testdb + driverClassName: org.h2.Driver + username: sa + password: pw + jpa: + database-platform: org.hibernate.dialect.H2Dialect +server: + port: 8080 diff --git a/cache/src/main/resources/banner.txt b/cache/src/main/resources/banner.txt new file mode 100644 index 0000000..f7a35db --- /dev/null +++ b/cache/src/main/resources/banner.txt @@ -0,0 +1,10 @@ + ('-. ('-. ) (`-. + _( OO) _( OO) ( OO ). +(,------.,--. (,------.(_/. \_)-. + | .---'| |.-') | .---' \ `.' / + | | | | OO ) | | \ /\ +(| '--. | |`-' |(| '--. \ \ | + | .--'(| '---.' | .--' .' \_) + | `---.| | | `---. / .'. \ + `------'`------' `------''--' '--' +powered by ELEX diff --git a/cache/src/main/resources/logback-spring.xml b/cache/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..19f023b --- /dev/null +++ b/cache/src/main/resources/logback-spring.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + + + + + UTF-8 + ${FILE_LOG_PATTERN} + + ${LOG_PATH} + + ${LOG_DIR}/sebastian_%d{yyyy-MM-dd}_%i.log.gz + + 10MB + + 60 + + + + + + + + + + + + + diff --git a/cache/src/main/resources/templates/main.mustache b/cache/src/main/resources/templates/main.mustache new file mode 100644 index 0000000..811061b --- /dev/null +++ b/cache/src/main/resources/templates/main.mustache @@ -0,0 +1,15 @@ +

File Upload Example!!!

+
+ + +
+ +
+
+

Uploaded Files

+

Click to download.

+
    + {{#files}} +
  • {{.}}
  • + {{/files}} +
diff --git a/rest-doc/build.gradle.kts b/rest-doc/build.gradle.kts new file mode 100644 index 0000000..1d0da04 --- /dev/null +++ b/rest-doc/build.gradle.kts @@ -0,0 +1,35 @@ +/* + * Spring-boot Examples + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +plugins { + id("elex-spring-boot") + + id("org.springframework.boot") version "2.5.3" + id("io.spring.dependency-management") version "1.0.11.RELEASE" + + id("org.asciidoctor.jvm.convert") version "3.3.0" +} +tasks.asciidoctor { + setSourceDir(File("src/main/asciidoc")) + attributes(mapOf( + "snippets" to "target/snippets" + )) +} +dependencies { + implementation("org.springframework.boot:spring-boot-starter-web") + implementation("org.springframework.boot:spring-boot-starter-mustache") + + compileOnly("org.projectlombok:lombok") + developmentOnly("org.springframework.boot:spring-boot-devtools") + runtimeOnly("org.mariadb.jdbc:mariadb-java-client") + + annotationProcessor("org.springframework.boot:spring-boot-configuration-processor") + annotationProcessor("org.projectlombok:lombok") + + testImplementation("org.springframework.boot:spring-boot-starter-test") + testImplementation("org.springframework.restdocs:spring-restdocs-mockmvc") +} diff --git a/rest-doc/src/main/asciidoc/index.adoc b/rest-doc/src/main/asciidoc/index.adoc new file mode 100644 index 0000000..cf1db79 --- /dev/null +++ b/rest-doc/src/main/asciidoc/index.adoc @@ -0,0 +1,11 @@ += Getting Started With Spring REST Docs + +This is an example output for a service running at http://localhost:8080: + +.request +include::{snippets}/home/http-request.adoc[] + +.response +include::{snippets}/home/http-response.adoc[] + +As you can see the format is very simple, and in fact you always get the same message. diff --git a/rest-doc/src/main/java/kr/pe/elex/examples/Application.java b/rest-doc/src/main/java/kr/pe/elex/examples/Application.java new file mode 100644 index 0000000..62cda2d --- /dev/null +++ b/rest-doc/src/main/java/kr/pe/elex/examples/Application.java @@ -0,0 +1,25 @@ +/* + * Spring-boot Examples + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + @Bean + public MyService service(){ + return new MyService(); + } +} diff --git a/rest-doc/src/main/java/kr/pe/elex/examples/MyController.java b/rest-doc/src/main/java/kr/pe/elex/examples/MyController.java new file mode 100644 index 0000000..a4cbde4 --- /dev/null +++ b/rest-doc/src/main/java/kr/pe/elex/examples/MyController.java @@ -0,0 +1,38 @@ +/* + * Spring-boot Examples + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.Resource; +import org.springframework.http.ContentDisposition; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import java.util.Set; + +@Slf4j +@RestController +public class MyController { + + @Autowired + private MyService service; + + + @GetMapping(path = {"/name/{name}"}) + public ResponseEntity getPerson(@PathVariable String name) { + return ResponseEntity.ok(service.getPerson(name)); + } + +} diff --git a/rest-doc/src/main/java/kr/pe/elex/examples/MyService.java b/rest-doc/src/main/java/kr/pe/elex/examples/MyService.java new file mode 100644 index 0000000..5d2ece5 --- /dev/null +++ b/rest-doc/src/main/java/kr/pe/elex/examples/MyService.java @@ -0,0 +1,32 @@ +package kr.pe.elex.examples; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.HashSet; +import java.util.Set; + +@Slf4j +@Service +public class MyService { + private Set data; + + @PostConstruct + private void init() { + data = new HashSet<>(); + data.add(new Person("Charlie", 11)); + } + + public Person getPerson(String name) { + for (Person person : data) { + if (person.getName().equals(name)) { + return person; + } + } + return null; + } + public void addPerson(Person person){ + data.add(person); + } +} diff --git a/rest-doc/src/main/java/kr/pe/elex/examples/Person.java b/rest-doc/src/main/java/kr/pe/elex/examples/Person.java new file mode 100644 index 0000000..6b7f64e --- /dev/null +++ b/rest-doc/src/main/java/kr/pe/elex/examples/Person.java @@ -0,0 +1,13 @@ +package kr.pe.elex.examples; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Person { + private String name; + private int age; +} diff --git a/rest-doc/src/main/java/kr/pe/elex/examples/package-info.java b/rest-doc/src/main/java/kr/pe/elex/examples/package-info.java new file mode 100644 index 0000000..ce9cc62 --- /dev/null +++ b/rest-doc/src/main/java/kr/pe/elex/examples/package-info.java @@ -0,0 +1,8 @@ +/* + * Spring-boot Examples + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; diff --git a/rest-doc/src/main/resources/application.yaml b/rest-doc/src/main/resources/application.yaml new file mode 100644 index 0000000..e5957b9 --- /dev/null +++ b/rest-doc/src/main/resources/application.yaml @@ -0,0 +1,5 @@ +spring: + application: + name: My spring-boot project +server: + port: 8080 diff --git a/rest-doc/src/main/resources/banner.txt b/rest-doc/src/main/resources/banner.txt new file mode 100644 index 0000000..f7a35db --- /dev/null +++ b/rest-doc/src/main/resources/banner.txt @@ -0,0 +1,10 @@ + ('-. ('-. ) (`-. + _( OO) _( OO) ( OO ). +(,------.,--. (,------.(_/. \_)-. + | .---'| |.-') | .---' \ `.' / + | | | | OO ) | | \ /\ +(| '--. | |`-' |(| '--. \ \ | + | .--'(| '---.' | .--' .' \_) + | `---.| | | `---. / .'. \ + `------'`------' `------''--' '--' +powered by ELEX diff --git a/rest-doc/src/main/resources/logback-spring.xml b/rest-doc/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..19f023b --- /dev/null +++ b/rest-doc/src/main/resources/logback-spring.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + + + + + UTF-8 + ${FILE_LOG_PATTERN} + + ${LOG_PATH} + + ${LOG_DIR}/sebastian_%d{yyyy-MM-dd}_%i.log.gz + + 10MB + + 60 + + + + + + + + + + + + + diff --git a/rest-doc/src/main/resources/templates/main.mustache b/rest-doc/src/main/resources/templates/main.mustache new file mode 100644 index 0000000..811061b --- /dev/null +++ b/rest-doc/src/main/resources/templates/main.mustache @@ -0,0 +1,15 @@ +

File Upload Example!!!

+
+ + +
+ +
+
+

Uploaded Files

+

Click to download.

+
    + {{#files}} +
  • {{.}}
  • + {{/files}} +
diff --git a/rest-doc/src/test/java/kr/pe/elex/examples/WebLayerTest.java b/rest-doc/src/test/java/kr/pe/elex/examples/WebLayerTest.java new file mode 100644 index 0000000..724e458 --- /dev/null +++ b/rest-doc/src/test/java/kr/pe/elex/examples/WebLayerTest.java @@ -0,0 +1,39 @@ +package kr.pe.elex.examples; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.RequestBuilder; + +import java.util.HashSet; +import java.util.Set; + +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; +import static org.springframework.restdocs.payload.PayloadDocumentation.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@WebMvcTest(MyController.class) +@AutoConfigureRestDocs(outputDir = "target/snippets") +public class WebLayerTest { + @Autowired + private MockMvc mockMvc; + + @Test + public void defaultPage() throws Exception { + this.mockMvc.perform( + get("/name/{name}", "Charlie")) + .andDo(print()) + .andExpect(status().isOk()) + .andDo(document("home", + responseFields(fieldWithPath("name").description("Name..."), + fieldWithPath("age").description("Age...")) + )); + } +} diff --git a/rest-doc/target/snippets/home/curl-request.adoc b/rest-doc/target/snippets/home/curl-request.adoc new file mode 100644 index 0000000..9ce98ca --- /dev/null +++ b/rest-doc/target/snippets/home/curl-request.adoc @@ -0,0 +1,4 @@ +[source,bash] +---- +$ curl 'http://localhost:8080/name/Charlie' -i -X GET +---- \ No newline at end of file diff --git a/rest-doc/target/snippets/home/http-request.adoc b/rest-doc/target/snippets/home/http-request.adoc new file mode 100644 index 0000000..64b7113 --- /dev/null +++ b/rest-doc/target/snippets/home/http-request.adoc @@ -0,0 +1,6 @@ +[source,http,options="nowrap"] +---- +GET /name/Charlie HTTP/1.1 +Host: localhost:8080 + +---- \ No newline at end of file diff --git a/rest-doc/target/snippets/home/http-response.adoc b/rest-doc/target/snippets/home/http-response.adoc new file mode 100644 index 0000000..35dbc1f --- /dev/null +++ b/rest-doc/target/snippets/home/http-response.adoc @@ -0,0 +1,8 @@ +[source,http,options="nowrap"] +---- +HTTP/1.1 200 OK +Content-Type: application/json +Content-Length: 27 + +{"name":"Charlie","age":11} +---- \ No newline at end of file diff --git a/rest-doc/target/snippets/home/httpie-request.adoc b/rest-doc/target/snippets/home/httpie-request.adoc new file mode 100644 index 0000000..92ef349 --- /dev/null +++ b/rest-doc/target/snippets/home/httpie-request.adoc @@ -0,0 +1,4 @@ +[source,bash] +---- +$ http GET 'http://localhost:8080/name/Charlie' +---- \ No newline at end of file diff --git a/rest-doc/target/snippets/home/request-body.adoc b/rest-doc/target/snippets/home/request-body.adoc new file mode 100644 index 0000000..dab5f81 --- /dev/null +++ b/rest-doc/target/snippets/home/request-body.adoc @@ -0,0 +1,4 @@ +[source,options="nowrap"] +---- + +---- \ No newline at end of file diff --git a/rest-doc/target/snippets/home/response-body.adoc b/rest-doc/target/snippets/home/response-body.adoc new file mode 100644 index 0000000..eb59f04 --- /dev/null +++ b/rest-doc/target/snippets/home/response-body.adoc @@ -0,0 +1,4 @@ +[source,options="nowrap"] +---- +{"name":"Charlie","age":11} +---- \ No newline at end of file diff --git a/rest-doc/target/snippets/home/response-fields.adoc b/rest-doc/target/snippets/home/response-fields.adoc new file mode 100644 index 0000000..b55a8d9 --- /dev/null +++ b/rest-doc/target/snippets/home/response-fields.adoc @@ -0,0 +1,12 @@ +|=== +|Path|Type|Description + +|`+name+` +|`+String+` +|Name... + +|`+age+` +|`+Number+` +|Age... + +|=== \ No newline at end of file diff --git a/security-with-jwt/build.gradle.kts b/security-with-jwt/build.gradle.kts new file mode 100644 index 0000000..9c6d3ba --- /dev/null +++ b/security-with-jwt/build.gradle.kts @@ -0,0 +1,33 @@ +/* + * Spring-boot Examples + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +plugins { + id("elex-spring-boot") + + id("org.springframework.boot") version "2.5.3" + id("io.spring.dependency-management") version "1.0.11.RELEASE" +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-mustache") + implementation("org.springframework.boot:spring-boot-starter-web") + + implementation ("org.springframework.boot:spring-boot-starter-security") + testImplementation ("org.springframework.security:spring-security-test") + + implementation ("org.springframework.boot:spring-boot-starter-data-jpa") + runtimeOnly("com.h2database:h2") + + compileOnly("org.projectlombok:lombok") + developmentOnly("org.springframework.boot:spring-boot-devtools") + runtimeOnly("org.mariadb.jdbc:mariadb-java-client") + + annotationProcessor("org.springframework.boot:spring-boot-configuration-processor") + annotationProcessor("org.projectlombok:lombok") + + testImplementation("org.springframework.boot:spring-boot-starter-test") +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 6f52b53..b8177e8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -6,5 +6,8 @@ */ rootProject.name = "spring-boot-examples" -include("file-upload", "security", "security-with-jpa", "validation", "testing", - "mqtt", "websocket", "restful", "swing") +include( + "file-upload", "security", "security-with-jpa", "validation", "testing", + "mqtt", "websocket", "restful", "swing", "rest-doc", + "cache", "security-with-jwt" +) diff --git a/swing/src/main/java/kr/pe/elex/examples/MyPanel.java b/swing/src/main/java/kr/pe/elex/examples/MyPanel.java index ddf4950..1375ad3 100644 --- a/swing/src/main/java/kr/pe/elex/examples/MyPanel.java +++ b/swing/src/main/java/kr/pe/elex/examples/MyPanel.java @@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.annotation.PostConstruct; import javax.swing.*; import java.awt.*; @@ -13,17 +14,20 @@ public class MyPanel extends JPanel { @Autowired private MyService service; + @Autowired + private MyToolbar toolbar; - public MyPanel() { - super(); - + @PostConstruct + private void init(){ this.setLayout(new BorderLayout()); JButton btn = new JButton("Button"); this.add(new JLabel("Hello"), BorderLayout.CENTER); this.add(btn, BorderLayout.SOUTH); + this.add(toolbar, BorderLayout.NORTH); btn.addActionListener(e -> { - System.out.println(service.getText()); + System.out.println(service.getSomething()); }); } + } diff --git a/swing/src/main/java/kr/pe/elex/examples/MyService.java b/swing/src/main/java/kr/pe/elex/examples/MyService.java index ef0c4e8..b6e8375 100644 --- a/swing/src/main/java/kr/pe/elex/examples/MyService.java +++ b/swing/src/main/java/kr/pe/elex/examples/MyService.java @@ -1,11 +1,16 @@ package kr.pe.elex.examples; -import org.springframework.stereotype.Component; +import lombok.Getter; +import lombok.Setter; import org.springframework.stereotype.Service; @Service public class MyService { - public String getText(){ + @Getter @Setter + private String something = "Something"; + + public String getText() { return "Hello~"; } + } diff --git a/swing/src/main/java/kr/pe/elex/examples/MyToolbar.java b/swing/src/main/java/kr/pe/elex/examples/MyToolbar.java new file mode 100644 index 0000000..f3e4c7b --- /dev/null +++ b/swing/src/main/java/kr/pe/elex/examples/MyToolbar.java @@ -0,0 +1,22 @@ +package kr.pe.elex.examples; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.swing.*; + +@Component +public class MyToolbar extends JToolBar { + @Autowired + private MyService service; + + @PostConstruct + private void init(){ + + this.add(new JLabel(service.getSomething())); + + service.setSomething("changed by Toolbar"); + + } +}