๋น ์์ฑ๋ฒ์
์ฑ๊ธํค ๋น(Singleton Bean)
โข
์คํ๋ง ๋น์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค์ผ๋ก ๋ง๋ค์ด์ง๋ค.
โข
๊ทธ๋ฌ๋ฏ๋ก, ์ปจํ
์ด๋๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ ๋น์ ์ธ์คํด์ค๋ ํญ์ ๋์ผํ๋ค.
โข
์ปจํ
์ด๋๊ฐ ํญ์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ๋ฐํํ๊ฒ ๋ง๋ค๊ณ ์ถ์ ๊ฒฝ์ฐ scope์ prototype์ผ๋ก ์ค์ ํด์ผ ํจ
โฆ
prototype์ผ๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ Bean์ xml์ ์ฝ๋ ์์ ์ด ์๋๋ผ, getBean ์ ํธ์ถํ๋ ์์ ์ Bean์ด ์์ฑ๋๋ค.
์คํ๋ง ๋น ์ค์
์คํ๋ง ๋น ์ค์ : XML ๋ฌธ์
โข
XML ๋ฌธ์ ํํ๋ก ๋น์ ์ค์ ๋ฉํ์ ๋ณด๋ฅผ ๊ธฐ์
โข
๋จ์ํ๋ฉฐ ์ฌ์ฉํ๊ธฐ ์ฌ์(์ง๊ด์ ), ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ์
โข
<bean> ํ๊ทธ๋ฅผ ํตํด ์ธ๋ฐํ ์ ์ด๊ฐ ๊ฐ๋ฅ
<bean id ="kor" class="com.ssafy.hello.di4.HelloMessageKor" scope = "prototype"></bean>
<bean id ="eng" class="com.ssafy.hello.di4.HelloMessageEng"></bean>
XML
๋ณต์ฌ
์คํ๋ง ๋น ์ค์ : Annotaion
โข
์ดํ๋ฆฌ์ผ์ด์
๊ท๋ชจ๊ฐ ์ปค์ง๊ณ ๋น์ ๊ฐ์๊ฐ ๋ง์์ง ๊ฒฝ์ฐ XML ํ์ผ์ ๊ด๋ฆฌํ๋๊ฒ์ด ๋ฒ๊ฑฐ๋ก์
โข
๋น์ผ๋ก ์ฌ์ฉ๋ ํด๋์ค์ ํน๋ณํ annotation์ ๋ถ์ฌํด์ฃผ๋ฉด ์๋์ผ๋ก ๋น ๋ฑ๋ก ๊ฐ๋ฅ
โข
"์ค๋ธ์ ํธ ๋น ์ค์บ๋"๋ก "๋น ์ค์บ๋"์ ํตํด ์๋ ๋ฑ๋ก
โฆ
๋น ์ค์บ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋์ค ์ด๋ฆ์ ๋น์ ์์ด๋๋ก ์ฌ์ฉ
โฆ
์ ํํ๋ ํด๋์ค ์ด๋ฆ์ ์ฒซ ๊ธ์๋ง ์๋ฌธ์๋ก ๋ฐ๊พผ ๊ฒ์ ์ฌ์ฉ
โฆ
๋ฌผ๋ก ๋ด๊ฐ ์์๋ก ๋ง๋ค์ด์ ์ฌ์ฉํ ์๋ ์์
โข
Annotaion์ผ๋ก ๋น์ ์ค์ ํ ๊ฒฝ์ฐ ๋ฐ๋์ component-scan์ ์ค์ ํด์ผ ํ๋ค.
โฆ
Stereotype annotation ์ข
๋ฅ
โช
๋น ์๋๋ฑ๋ก์ ์ฌ์ฉํ ์ ์๋ annotation
โช
๋น ์๋์ธ์์ ์ํ annotation์ด ์ฌ๋ฌ๊ฐ์ธ ์ด์ ?
โข
๊ณ์ธต๋ณ๋ก ๋น์ ํน์ฑ์ด๋ ์ข
๋ฅ๋ฅผ ๊ตฌ๋ถ
โข
AOP pointcut ํํ์์ ์ฌ์ฉํ๋ฉด ํน์ annotation์ด ๋ฌ๋ฆฐ ํด๋์ค๋ง ์ค์ ๊ฐ๋ฅ
โข
ํน์ ๊ณ์ธต์ ๋น์ ๋ถ๊ฐ๊ธฐ๋ฅ์ ๋ถ์ฌ
@Component("memberService")
@Scope("singleton")
public class MemberServiceImpl implements MemberService {
@Override
public int registerMember(MemberDto memberDto){
return 0;
}
}
Java
๋ณต์ฌ
DI (Dependency Ingection)
โข
๊ฐ์ฒด ๊ฐ์ ์์กด๊ด๊ณ๋ฅผ ์์ ์ด ์๋ ์ธ๋ถ์ ์กฐ๋ฆฝ๊ธฐ๊ฐ ์ํ
โข
์ ์ด์ ์ญํ(inversion of Control, IoC) ์ด๋ผ๋ ์๋ฏธ๋ก ์ฌ์ฉ
โข
DI๋ฅผ ํตํด ์์คํ
์ ์๋ ๊ฐ ๊ฐ์ฒด๋ฅผ ์กฐ์ ํ๋ ์ธ๋ถ ๊ฐ์ฒด๊ฐ ๊ฐ์ฒด๋ค์๊ฒ ์์ฑ์์ ์์กด ๊ด๊ณ๋ฅผ ์ค
โข
๋์จํ ๊ฒฐํฉ(loose coupling)์ ์ฃผ์ ๊ฐ์
โฆ
๊ฐ์ฒด๋ ์ธํฐํ์ด์ค์ ์ํ ์์กด ๊ด๊ณ๋ง์ ์๊ณ ์์ผ๋ฉฐ, ์ด ์์กด ๊ด๊ณ๋ ๊ตฌํ ํด๋์ค์ ๋ํ ์ฐจ์ด๋ฅผ ๋ชจ๋ฅด๋ ์ฑ ์๋ก ๋ค๋ฅธ ๊ตฌํ์ผ๋ก ๋์ฒด๊ฐ ๊ฐ๋ฅ
Spring ์ค์ : xml
โข
๊ธฐ๋ณธ์ค์ - ๋น ๊ฐ์ฒด ์์ฑ ๋ฐ ์ฃผ์
โฆ
์ฃผ์
ํ ๊ฐ์ฒด๋ฅผ ์ค์ ํ์ผ์ ์ค์
โช
<bean> : ์คํ๋ง ์ปจํ
์ด๋๊ฐ ๊ด๋ฆฌํ Bean ๊ฐ์ฒด๋ฅผ ์ค์
โฆ
๊ธฐ๋ณธ ์์ฑ
โช
name : ์ฃผ์
๋ฐ์ ๊ณณ์์ ํธ์ถ ํ ์ด๋ฆ
โช
id : ์ฃผ์
๋ฐ์ ๊ณณ์์ ํธ์ถ ํ ์ด๋ฆ ์ค์ (์ ์ผ ๊ฐ)
โช
class : ์ฃผ์
ํ ๊ฐ์ฒด์ ํด๋์ค
โช
factory-method : Singleton ํจํด์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด์ factory ๋ฉ์๋ ํธ์ถ
์คํ๋ง ๋น ์์กด ๊ด๊ณ์ค์ : xml
โข
์์ฑ์ ์ด์ฉ
โฆ
๊ฐ์ฒด ๋๋ ๊ฐ์ ์์ฑ์๋ฅผ ํตํด ์ฃผ์
๋ฐ๋๋ค
โฆ
<constructor-arg> : <bean>์ ํ์ํ๊ทธ๋ก ์ค์ ํ bean ๊ฐ์ฒด ๋๋ ๊ฐ์ ์์ฑ์๋ฅผ ํตํด ์ฃผ์
ํ๋๋ก ์ค์
โช
์ค์ ๋ฐฉ๋ฒ : <ref>, <value>์ ๊ฐ์ ํ์ํ๊ทธ๋ฅผ ์ด์ฉํ์ฌ ์ค์ ํ๊ฑฐ๋ ๋๋ ์์ฑ์ ์ด์ฉํ์ฌ ์ค์
1.
ํ์ํ๊ทธ ์ด์ฉ
a.
๊ฐ์ฒด ์ฃผ์
์ : <ref bean = "bean name"/>
b.
๋ฌธ์์ด(String), primitive data ์ฃผ์
์ : <value>๊ฐ</value>
โข
type ์์ฑ : ๊ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก String์ผ๋ก ์ฒ๋ฆฌ
๊ฐ์ ํ์
์ ๋ช
์ํด์ผ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ
ex) <value type="int">10</value>
2.
์์ฑ ์ด์ฉ
a.
๊ฐ์ฒด ์ฃผ์
์ : <constructor-arg ref ="bean name"/>
b.
๋ฌธ์์ด(String), primitive data ์ฃผ์
์ : <constructor-arg value="๊ฐ"/>
โข
Property ์ด์ฉ
โฆ
property๋ฅผ ํตํด ๊ฐ์ฒด ๋๋ ๊ฐ์ ์ฃผ์
๋ฐ๋๋ค. - setter method
โช
์ฃผ์ : setter๋ฅผ ํตํด์๋ ํ๋์ ๊ฐ๋ง ๋ฐ์ ์ ์๋ค.
โฆ
<property> : <bean>์ ํ์ํ๊ทธ๋ก ์ค์ ํ bean ๊ฐ์ฒด ๋๋ ๊ฐ์ property๋ฅผ ํตํด ์ฃผ์
ํ๋๋ก ์ค์
โช
์ค์ ๋ฐฉ๋ฒ : <ref>, <value>์ ๊ฐ์ ํ์ํ๊ทธ๋ฅผ ์ด์ฉํ์ฌ ์ค์ ํ๊ฑฐ๋ ๋๋ ์์ฑ์ ์ด์ฉํ์ฌ ์ค์
1.
ํ์ํ๊ทธ ์ด์ฉ
a.
๊ฐ์ฒด ์ฃผ์
์ : <ref bean = "bean name"/>
b.
๋ฌธ์์ด(String), primitive data ์ฃผ์
์ : <value>๊ฐ</value>
2.
์์ฑ ์ด์ฉ : name - ๊ฐ์ ์ฃผ์
ํ property ์ด๋ฆ(setter์ ์ด๋ฆ)
a.
๊ฐ์ฒด ์ฃผ์
์ : <property name = "propertyname" ref ="bean name"/>
b.
๋ฌธ์์ด(String), primitive data ์ฃผ์
์ : <property name ="propertyname" value="๊ฐ"/>
3.
xml namespace๋ฅผ ์ด์ฉํ์ฌ ์ค์
์คํ๋ง ๋น ์์กด ๊ด๊ณ์ค์ : Annotation
โข
Annotation : ๋ฉค๋ฒ๋ณ์์ ์ง์ ์ ์ ํ๋ ๊ฒฝ์ฐ setter method๋ฅผ ๋ง๋ค์ง ์์๋ ๋จ
โข
ํน์ Bean์ ๊ธฐ๋ฅ ์ํ์ ์ํด ๋ค๋ฅธ Bean์ ์ฐธ์กฐํด์ผ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
โข
@Resource
โฆ
Spring 2.5๋ถํฐ ์ง์
โฆ
๋ฉค๋ฒ๋ณ์, setter method์ ์ฌ์ฉ ๊ฐ๋ฅ
โฆ
ํ์
์ ๋ง์ถฐ์ ์ฐ๊ฒฐ
โข
@Autowired
โฆ
Spring 2.5๋ถํฐ ์ง์
โฆ
Spring Framework์์ ์ง์ํ๋ Dependency ์ ์ ์ฉ๋์ Annotation
โฆ
Spring Framework์ ์ข
์์ ์ด๊ธด ํ์ง๋ง ์ ๋ฐํ Dependency Injection์ด ํ์ํ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค.
โฆ
๋ฉค๋ฒ๋ณ์, setter, constructor, ์ผ๋ฐ method ์ฌ์ฉ ๊ฐ๋ฅ
โฆ
ํ์
์ ๋ง์ถฐ์ ์ฐ๊ฒฐ
โช
๋์ผํ ํ์
์ bean์ด ์ฌ๋ฌ๊ฐ์ผ ์ ์๋ค!
โช
์ด๋ฐ ๊ฒฝ์ฐ์๋ @Qualifire("name")์ผ๋ก ์๋ณ
//@Repository
@Repository(value = "aaa")
public class GuestBookDaoImpl implements GuestBookDao {
...
}
public class GuestBookServiceImpl implements GuestBookService {
@Autowired
@Qualifier("aaa")
//@Qualifier("guestBookDaoImpl") -> value ์ง์ ์ ์ํ ๊ฒฝ์ฐ class ์ด๋ฆ์ ์ฒซ๊ธ์๋ฅผ ์๋ฌธ์๋ก
private GuestBookDao guestBookDao;
...
}
Java
๋ณต์ฌ
โข
@Inject
โฆ
Spring 3.0๋ถํฐ ์ง์
โฆ
Framework์ ์ข
์์ ์ด์ง ์์
โฆ
Javax.inject-x.x.x.jar ํ์
โฆ
๋ฉค๋ฒ๋ณ์, setter, constructor, ์ผ๋ฐ method ์ฌ์ฉ ๊ฐ๋ฅ
โฆ
์ด๋ฆ์ผ๋ก ์ฐ๊ฒฐ
์คํ๋ง ๋น ์์กด ๊ด๊ณ์ค์ : Java Configuration
โข
xml ํ์ผ ๋์ Java ํ์ผ์ ์ด์ฉํด์ Configuration์ ์ง์ ํ ์ ์๋ค.
๊ธฐ์กด XML (ApplicationContext.xml)
<?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 http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.ssafy.model"></context:component-scan>
<bean class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/ssafyweb?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8"/>
<property name="username" value="ssafy"/>
<property name="password" value="ssafy"/>
</bean>
</beans>
XML
๋ณต์ฌ
์๋ฐ config
// ApplicationConfig.java
// applicationcontext.xml ํ์ผ ๋์ฒด
@Configuration // ๊ตฌ์ฑํ์ผ์์ ๋ช
์
@ComponentScan(basePackages = {"com.ssafy.model"}) // component sacn ๋์ ์ง์
public class ApplicationConfig {
@Bean
public DataSource getDataSource() {
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
dataSource.setDriverClass(com.mysql.cj.jdbc.Driver.class);
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/ssafyweb?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8");
dataSource.setUsername("ssafy");
dataSource.setPassword("ssafy");
return dataSource;
}
}
Java
๋ณต์ฌ
์๋ฐ ์ฝ๋์์์ ์ฌ์ฉ
//com/ssafy/configuration/applicationContext.xml ์ค์
ApplicationContext context =
new ClassPathXmlApplicationContext("com/ssafy/configuration/applicationContext.xml");
//ApplicationConfig.java ์ค์
ApplicationContext context =
new AnnotationConfigApplicationContext(ApplicationConfig.class);
Java
๋ณต์ฌ