solid 원칙을 잘 지키려면 어떻게 해야할까? -> spring을 사용하자
왜 -> spring이란 Java로 마음대로 짜도록 두는 시스템이 아님.
-> 오히려 좋아, 틀이 있어서 단순해짐.
이때 만드는 것을 강제하는 판때기 = 컨테이너
컨테이너 위에 얹어지는 블록들을 Bean이라고 함.
일종의 레고다.
a가 b를 사용한다. a가 b에 의존한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="conveniencePayService" class="com.zerobase.convpay.service.ConveniencePayService">
<constructor-arg name="paymentInterfaceSet">
<set>
<ref bean="getMoneyAdapter"/>
<ref bean="getCardAdapter"/>
</set>
</constructor-arg>
<constructor-arg name="discountInterface" ref="DiscountByPayMethod"/>
</bean>
<bean id="getCardAdapter" class="com.zerobase.convpay.service.CardAdapter"/>
<bean id="getMoneyAdapter" class="com.zerobase.convpay.service.MoneyAdapter"/>
<bean id="DiscountByPayMethod" class="com.zerobase.convpay.service.DiscountByPayMethod"/>
<bean id="DiscountByConvenience" class="com.zerobase.convpay.service.DiscountByConvenience"/>
</beans>
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
ConveniencePayService conveniencePayService = applicationContext.getBean("conveniencePayService", ConveniencePayService.class);
-> 의존성이 많아질수록 코드의 양이 너무 많아짐.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.zerobase.convpay"/>
</beans>
->하지만 이럼에도 불구하고 오류 다수 발생 ;;
-> Spring4에서부터는 XML이 아닌 Java Config를 사용해서 빈 등록
@Configuration
@ComponentScan(basePackages = "com.zerobase.convpay")
public class ApplicationConfig {
}
사용자가 직접 클래스를 생성하지 않고, 스프링이 제어하도록 함