Posts
Q&A
9๊ฐ 18๋ถ์ฆ์ ์์ฑ๊ฐ์ Label1Text๊ฐ ์๋น๋๋ค.
์ ํด๊ฒฐ ๋์ต๋๋ค
- 0
- 2
- 29
Q&A
application.properties ์์ ์ ํด์ค๋ ์๋ฌ๊ฐ ๋ฉ๋๋ค.
๋ฉค๋ฒ์๋น์ค ์ํ ์์ฑ์ ์ด๋ ๊ฒ ์์ ํด์ค๋ ์๋ฌ๊ฐ ๋จ๋ค์ @Autowired public MemberServiceImpl(@Qualifier("memoryMemberRepository") MemberRepository memberRepository) { this.memberRepository = memberRepository; }
- 0
- 3
- 65
Q&A
applcation.properties ์์ ํด๋ ์๋ฌ๊ฐ ๋ฉ๋๋ค.
๋ ํด๋์ค ๋ณด์ฌ๋๋ฆด๊ฒ์ package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberRepository; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; @Configuration //์๋ถ์ฌ๋ ์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น๋ก ๋ค ๋ฑ๋ก๋ฉ๋๋ค ์ ๋ฅผ ๋นผ๊ณ ํ ์คํธ์ ์์ํ ์ฑ๊ตฌ์ฑ์ด ์ถ๋ ฅ๋จ ๊ทผ๋ฐ ์ด๋ ๊ฒ ๋๋ฉด ๋ค๋ฅธ ์ฑ๊ธํค์ด ๊นจ์ง ์ถ๋ ฅ์ด 5๊ฐ ์ ์ฒด ์ถ๋ ฅ๋จ public class AppConfig { //@Bean memberService -> new MemoryMemberRepository() //@Bean orderService -> new MemoryMemberRepository() ์ด๋ ๊ฒ ํ๋ฉด ์ฑ๊ธํค์ด ๊นจ์ง์ง ์์๊น์?? //์ด ๊ณจ๋ฑ ์ด ๋น์ด๋ฉด ์ปจํ ์ธ ์ฑ์ด ๋ค์ด์์ //call AppConfig.memberService //call AppConfig.memberRepository //call AppConfig.memberRepository //call AppConfig.orderService //call AppConfig.memberRepository //์ค์ ํ ์คํธ ๋๋ ค๋ณด๋ //call AppConfig.memberService //call AppConfig.memberRepository -> ์ด๊ฒ ์ธ๋ฒํธ์ถ๋์ด์ผ ํ๋๋ฐ ํ๋ฒ๋ง ํธ์ถ ๋ ์ ๊ธฐํ ์ํฉ ์คํ๋ง์ด ์ ๋ง ์ด๋ ํ ๋ฐฉ๋ฒ์ ์จ์๋ผ๋ ์ฑ๊ธํค์ ๋ณด์ฅํด ์ฃผ๋๊ตฌ๋ ๋ผ๋ ๊ฑธ ์์ค ์ ์์ //call AppConfig.orderService //appconfig์ ๋น๋ฐ์ด ์๋ค. //์ด ๊ณจ๋ฑ ์ด ๋น์ด ๋ถ์ ๋ฉ์๋๋ง๋ค ์ด๋ฏธ ์คํ๋ง๋น์ด ์กด์ฌํ๋ฉด ์กด์ฌํ๋ ๋น์ //๋ฐํํ๊ณ ์คํ๋ง๋น์ด ์์ผ๋ฉด ์๋ก ์์ฑํด์ ์คํ๋ง๋น์ผ๋ก ๋ฑ๋กํด์ ๋ฐํํ๋ ์ฝ๋๊ฐ ๋์ ์ผ๋ก //๋ง๋ค์ด์ง๋ ๊ฑฐ์์ ์ด๋๋ถ์ ์ฑ๊ธํค์ด ๋ณด์ฅ๋๋๊ฑฐ์์ ์์ผ๋ฉด ์คํ๋ง๋น๋ฑ๋ก, ์์ผ๋ฉด ๊ธฐ์กด์ ๊บผ๋ด์ ๋ฐํ ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ๋ฒ ํธ์ถ๋๋๊ฒ ์๋๋ผ ํ๋ฒ๋ง ํธ์ถ ์ด๋ฏธ ๋ฑ๋ก์ด ๋์์ด์ // @Autowired MemberRepository memberRepository;//์ด๋ ๊ฒํ๋ฉด Configuration ์์ ๋ ํด๊ฒฐ์ด๋จ ์์กด๊ด๊ณ ์ฃผ์ ๊ทธ๋ฌ๋ฉด ์คํ๋ง์์ ๋ค์ ๋์ด์จ ๊ฑฐ๋ฅผ ์ง์ด๋ฃ์ด ์ฃผ๋ ๊ฑฐ๊ฑฐ๋ ์ @Bean public MemberService memberService(){// ๋ฉค๋ฒ์๋น์ค๊ฐ ๋น์ ์ด๋ฆ System.out.println("call AppConfig.memberService");//soutm return new MemberServiceImpl(memberRepository());// ctrl+alt+m ๋ฆฌํดํด์ newํด์ ๋ฐํํ๋ ์ ๊ฐ์ฒด๋ฅผ ๋น ๊ฐ์ฒด๋ก ๋ฑ๋กํด์ค๋ค. ์๊ฑฐ๋ฅผ ์คํ๋ง ๋น์ด๋ผ๊ณ ํ๋ค. }// ๋น ์ด๋ฆ์ ํญ์ ๋ค๋ฅธ ์ด๋ฆ์ ๋ถ์ฌ @Bean public MemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public OrderService orderService() { System.out.println("call AppConfig.orderService"); return new OrderServiceImpl(memberRepository(),discountPolicy());//์ด๋ ๊ฒ ์ฃผ์ ๋๊ฑธ ๋ฃ์ด์ฃผ๋ฉด ํ ์คํธ ํต๊ณผ๋จ, ์ฃผ์๊ฐ๋ ๊ฐ์ } @Bean public DiscountPolicy discountPolicy() { //return new FixDiscountPolicy();// ํ ์ธ ์ ์ฑ ์๋ํ ๊ฐ์ฒด๋ฅผ ๋ฐ๊พผ๋ค. return new RateDiscountPolicy(); } }package hello.core; import hello.core.member.MemberRepository; import hello.core.member.MemoryMemberRepository; import org.springframework.context.annotation.*; @Configuration//์ค์ ์ ๋ณด๋๊น @ComponentScan//์คํ๋ง๋น์ ์ซ ๊ธ์ด ๊ฐ์ง๊ณ ์๋์ผ๋ก ์คํ๋ง ๋น์ผ๋ก ๋์ด์ฌ๋ ค์ผ ๋๋ค. ( basePackages = "hello.core.member",//์ด ์์น์์๋ถํฐ ์ฐพ์์ ๋ค์ด๊ฐ๋ ๊ฒ ์ด๋ ๊ฒ ํด๊ฐ๊ณ ๋ฉค๋ฒ๋ถํฐ ์ปดํฌ๋ํธ ์ค์บ ๋์์ด ๋๋ค basePackageClasses = AutoAppConfig.class,//์ง์ ํ ํด๋์ค์ ํจํค์ง๋ฅผ ํ์ ์์ ์์น๋ก ์ง์ ํ๋ค. ์ง์ ์ํ๋ฉด ๋ํดํธ excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) )//์ปดํฌ๋ํธ ์ค์บ์ ์ฌ์ฉํ๋ฉด @Configuration ์ด ๋ถ์ ์ค์ ์ ๋ณด๋ ์๋์ผ๋ก ๋ฑ๋ก๋๊ธฐ ๋๋ฌธ์, AppConfig, TestConfig ๋ฑ ์์ ๋ง๋ค์ด๋์๋ ์ค์ ์ ๋ณด๋ ํจ๊ป ๋ฑ๋ก๋๊ณ , ์คํ๋์ด ๋ฒ๋ฆฐ๋ค. ๊ทธ๋์ excludeFilters๋ฅผ ์ด์ฉํด์ ์ค์ ์ ๋ณด๋ ์ปดํฌ๋ํธ ์ค์บ ๋์์์ ์ ์ธํ๋ค. public class AutoAppConfig {//ํ ์คํธ ๊ฒฐ๊ณผ memberService2, memoryMemberRepository ์ด๋๊ฐ์ง๋ง ์ ๋ ฅ ๋จ @Bean(name= "memoryMemberRepository") @Primary //ํ ๋น์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ๊ทธ ๋น์ @Primary ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ์ธ์. public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } }// ์ค์ ์ ๋ณด ํด๋์ค์ ์์น๋ฅผ ํ๋ก์ ํธ ์ต์๋จ์ ๋๋ ๊ฒ, ํ๋ก์ ํธ ์์๋ฃจํธ์ ๋๋๊ฒ ์ข์, componentScane->์คํ๋ง ๋น ์๋ ๋ฑ๋ก SpringBootApplication ctrl+ํด๋ฆญํด๋ณด๋ฉด ์์ ์๋ค. //์ปดํฌ๋ํธ ์ค์บ ๊ธฐ๋ณธ ๋์ ์ปจํธ๋กค๋ฌ, ์๋น์ค, ๋ฆฌํฌ์งํฐ๋ฆฌ, ์ปจํผ๊ท๋ ์ด์ ๋ค ์คํ๋ง ๋น ๋ฑ๋ก ์ด๋ ธํ ์ด์ ์์์ด๋, ์ฐ๋๋๋ ๊ธฐ๋ฅ์๋ค.
- 0
- 2
- 38
Q&A
404์๋ฌ๊ฐ ๊ณ์ ๋น๋๋ค.
๊ทธ๋ผ ๋ต๋ณ ๋ด์ฉ๋ง ๋ดค์๋ ์๋ฌด๋ฌธ์ ์๋๊ฑด๋ฐ ์๊ทธ๋ฌ์ฃ ๊ทธ๋๋ค ๋ฆฌํ๋ ์ฌ๋ ์์ฐจ๋กํ๊ณ ์ปจํธ๋กค๋ฌ url ๊ฒฝ๋ก ํด๋๊ฒฝ๋ก ๋ค ๋ฌธ์ ์๋๊ฑด๋ฐ์..
- 0
- 2
- 136
Q&A
404์๋ฌ์ ๊ดํ ์ง๋ฌธ static ํด๋๋ฐ์ jsp ํ์ผ์กฐ์ฐจ ์คํ์๋ฉ๋๋ค.
build.gradle.kts ํ์ผ์ ๋ณด๋ด๋๋ฆฌ๊ฒ ์ต๋๋ค.plugins { java alias(libs.plugins.spring.boot) alias(libs.plugins.spring.dependency.management) id("jacoco") } configurations { compileOnly { extendsFrom(configurations.annotationProcessor.get()) } } allprojects { group = property("app.group").toString() } dependencyManagement { imports { mavenBom(libs.spring.cloud.dependencies.get().toString()) } } dependencies { implementation(libs.spring.boot.starter.web) implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-thymeleaf") implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.apache.tomcat.embed:tomcat-embed-jasper") implementation("javax.servlet:javax.servlet-api:4.0.1") implementation ("javax.servlet:jstl") compileOnly(libs.lombok) annotationProcessor(libs.lombok) annotationProcessor(libs.spring.boot.configuration.processor) testImplementation(libs.spring.boot.starter.test) } // about source and compilation java { sourceCompatibility = JavaVersion.VERSION_17 } with(extensions.getByType(JacocoPluginExtension::class.java)) { toolVersion = "0.8.7" } // bundling tasks tasks.getByName("bootJar") { enabled = true } tasks.getByName("jar") { enabled = false } // test tasks tasks.test { ignoreFailures = true useJUnitPlatform() }
- 0
- 3
- 241
Q&A
08:55 ํ ์คํธ ์ดํ์ ํ๋ผ๋ฏธํฐ id ๊ฐ์๋ฃ์ด๋ ์๋ฌ๊ฐ ๋น๋๋ค.
์ด๋ ๊ฒ ์ค์ ํ๋ ๋๋ค์dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' // implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2' // testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } testRuntimeOnly 'org.junit.platform:junit-platform-launcher' }
- 0
- 2
- 137