Spring-Core
Spring FrameworkOverview
스프링은 Java EE(엔터프라이즈)를 쉽게 만들수 있다.
엔터프라이즈 어플리케이션 Java EE 는 커뮤니티 프로세스가 주도하는 소프트웨어 ,JS360,370...등등을 볼수 있다.
엔터프라이즈 소프트웨어 : 비지니스를 풀려고 할때 모든 셋에 대한 정의가 되어있다는 점
javax 패키지
Java Servlet도 Java EE에 대한 기능
역사
2003년부터 시작, J2EE가 너무 복잡함 , 복합함을 해결하기 위해서 POJO라는 개념이 나오기도함.
무조건 JavaEE Spec에 따라서 해야했는데,
IoC Container
core : ioc, eventresource, ibn validation, databinding, spel, aop..
Spring : Inversion of Control 을 구현한 프레임워크
왜 inversion of Controll이 좋은가?, Di 의 개념은?
ApplicationContext를 통해서 ioc를 진행하고있음
ApplicationContext는 aop, eventpublication, ....등 다양한 것들을 구현하고있다.
interface ApplicationContext 란 ?
여러 구현체들과 설명이 많이 있음 spring의 핵심
spring container를 통해서 pojo비지니스 오브젝트를 configuration 메타 데이터를 만들어놓으면 spring이 자동으로 만들어주고 활용할수 있게 해준다.
Instantiating a Container
구현체를 통해서 applicationContext를 사용할 수 있게 된다.
코드로 객체를 생성하는것이 아니라 xml을통해서 configuration Metadata를 만들고 비지니스 로직을 만들고 spring container를 통해서 동작(실행)이 하게된다.
applicationContext의 인터페이스를 구현한 것이 springcontainer임 !!
Spring Container설정은 아래와같다.
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
Dao dao = new Dao()
객체 생성 관련 설정
<beans....>
<bean class="kr.morris.cli.dao"></bean>
</beans....>
객체의 타입에 맞게 context를 사용해서 객체를 가지고 옴 .
Dao dao = context.getBean(Dao.class);
Configuration Metadata
- xml
- 특정 namespace을 가지고 있다.
- 라는 태그 안에 < bean /> 을 설정 할 수 있다.
- annotation
- java
Bean
Naming Bean
기존의 빈
<bean class="kr.morris.cli.Dao"/>
id 는 그대로 하나만 가지고 있어야한다.
unique 하더라도 spring에서 다르게 관리하는 bean을 만들수도 있다.<bean id='dao'.../>
name으로도 추가가 가능하다
<bean name='dao1, dao2'.../>
같은 클래스를 가리키더라도 id,name이 다르면 새로운 객체를 만드는 것이기 때문에 둘의 객체의 hash값이 다르게 출력된다.
bean을 지정하면 기본 생성자에대해서 객체를 생성한다.
매개변수를 받는 생성자를 입력받게 된다면 ApplicationContext에서 bean을 불러 올때 에러가난다. (beanCreateionException)
static factory method를 사용해서 만들 수도 있다.
Dao 설정에 factory-method 속성에 createDao라는 매서드를 입력해주주면된다.
<bean id="dao" class="kr.morris.cli.Dao" factory-method="createDao"></bean>
public class Dao {
public stataic Dao createDao(){
return new Dao();
}
}
instance Factory method
인스턴스 Method를 이용해 bean 객체를 생성이 가능하다
Factory bean 인터페이스를 구현한 팩토리 빈이 바로 팩토리 빈 오브젝트의 메소드를 이용해 bean 객체를 생성하는 대표적인 방법
두 개의 bean이 필요함.
하나는 빈을 만들어줄 클래스가 정의된 빈 (Dao.class)
우리가 사용할 빈 (DaoFactory)
특정외부 자원들을 사용할때 팩토리 매서드를 사용해서 보는 경우가 있음public class DaoFactory{
public Dao createDao(){ return new Dao(); }
}
public class Dao{
}
동작을 해보면 팩토리메서드를 통해서 실제로 daofactory를 통해서 bean이 생성된 것을 알 수 있다.
참고 :
패스트 캠퍼스 Java Spring 강의중 Spring-Core
'BackEnd > Spring' 카테고리의 다른 글
Bean Scope (0) | 2020.02.11 |
---|---|
ClassPath Scanning and Managed Components (0) | 2020.02.08 |
Customizing the Nature of a Bean (0) | 2020.02.01 |
DI (Dependency Injection) (0) | 2020.02.01 |
SpringCore - IoC Container(1) (0) | 2020.01.19 |