다른 클래스를 상속받아서 만들어야 하는 클래스가 아닌 순수한 형태의 자바 클래스
제어의 역전이라는 뜻으로 개발자가 직접 객체를 언제 생성하고 없앨지 결정하는 것이 아니라 컨테이너에게 맡긴다는 뜻이다.
POJO 객체의 생성에서 생명주기의 관리까지를 IoC Container 에게 담당시킴으로써(XML 이용) 개발에 있어서 편의성과 재사용성의 극대화를 추구하는 개념
Spring 에서 BeanFactory가 기본 IoC 컨테이너이고, 보다 향상된 형태로 ApplicationContext라는 컨테이너도 지원하고 있다.
IoC 컨테이너에 의해서 Bean 의 생명주기가 관리된다.
이렇게 관리되는 Bean 은 POJO 타입이고 싱글톤이다.
XML 설정을 통해서 각각의 Bean 들을 묶어주는데, 이를 wiring라고 한다.
묶인 Bean 을 원하는 곳에 적용하는 것을 DI(의존성 주입) 이라고 부른다.
생성자 방식 - 의존할 객체를 통해 객체를 생성함으로써 의존관계를 형성하는 방법
setter를 통해 값을 전달받아 객체를 생성한다
프로퍼티 방식에서 property태그를 사용하지 않고 간단한 네이밍을 통해 property 태그를 대체한다
관점 지향 프로그래밍이란 뜻으로 기존의 객체지향언어에 의해 추구된 모듈화에 따라 많아진 중복된 코드라던지 공통된 처리에 관련한 것들을 관점으로 뽑아내어 공통으로 처리하는 방식
특징 :
의존성 주입이란 뜻으로 객체를 생성해서 필요로 하는 곳에 넣어주는 것을 뜻한다.
1. @Required : 필수 프로퍼티를 세팅할 때 사용
2. @Autowired : 자동으로 똑같은 이름의 빈을 찾아서 주입해준다. (타입으로 찾음)
3. @Qualifier("name") : bean설정에 qualifier 태그를 이용한 수식어로 특정 빈 지정 시 사용
4. @Resource(name="testBean") : 특정 bean 이름을 지정 (JDK6,JEE5 이상)
@Resource 어노테이션은 어플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용된다. 프로퍼티 및 설정메서드(Setter, Getter)등에 적용시키며 스프링 설정파일에 등록되어있는 빈 객체의 name 속성을 통하여 자동으로 주입된다. (@Autowired 어노테이션이 타입으로 자동 주입을 하는 반면, @Resource 어노테이션은 name속성을 통해 자동 주입을 실행한다
5. @PostConstruct, @PreDestroy : 초기화, 소멸 시 사용될 메소드 지정
---- 이하는 <context:component-scan /> 태그로 사용 가능
6. @Component : XML 설정없이 자동 빈 등록 @Component("name") 이름 지정 가능
7. @Service : @Component 와 현재 다를 바가 없으나 차후 세부화 예정.
8. @Repositary : 퍼시스턴스 영역의 Exception 을 번역해주는 기능 제공
10. @Scope("prototype") : 싱글톤이 아닌 것으로 scope 지정 시 사용
Bean에서 특정 객체가 필요할 경우 관련 인터페이를 구현함으로써 객체를 자동으로 주입받을 수 있다.
1) BeanFactoryAware : BeanFactory 객체를 제공
2) BeanNameAware : Bean의 id값을 제공
3) ApplicationContextAware : ApplicationContext를 제공
4) MessageSourceAware
5) ApplicationEventPublisherAware
6) ResourceLoaderAware
7) BeanPostProcessor : Bean이 생성될 때 호출되는 메소드를 제공
1) Aspect : 관점이란 뜻으로 트랜젝션, 보안, 로깅 처럼 공통적으로 쓰이는 부분들에 개입하는 것을 모듈화한 것.
2) Join point : 클래스의 객체 생성 시점, 메소드 호출 시점, Exception 발생 시점 등
AOP가 개입되는 시점을 말한다.
3) Advice : 특정한 join point에서 interceptor 형태로써 다양한 기능을 제공하는 것을 뜻함.
- Before advice : 메소드 호출전의 기능 제공
- After returning advice : 모든 메소드 실행이 다 끝나고 난 뒤 기능 제공
- After throwing advice : 익셉션이 던져졌을 때 기능 제공
- After (finally) advice : 익셉션 발생이 됐던 안됐던 간에 기능 제공
- Around advice : 가장 강력한 advice 로써 메소드 시작부터 마지막까지 두루 기능을 제공하는 것이 가능
4) Pointcut : 정규 표현식이나 AspectJ의 문법 등으로 실제로 적용되는 join point 를 선언.
5) Weaving : 실제 aspect 객체와 대상 객체를 컴파일 시나, 로딩 시나, 실행 시에 합쳐주는 것을 뜻한다.
6) Target : 실제 advice를 받는 객체로써 대상을 뜻한다.
JdbcDaoSupport클래스는 간결한 데이터베이스 소스를 지원하기 위해 JdbcTemplate 클래스를 지원하고 있다.
JdbcTemplate클래스는 JDBC작업을 할 때 정형화된 코드를 내장하고 있기 때문에 반드시 필요한 것들만 전달해 주면 데이터베이스에 연결, PrepatedStatement객체생성, SQL실행등을 담당해 준다.
JdbcTemplate객체를 사용하기 위해서는 getJdbcTemplate()를 호출하면 된다.
dataSource속성을 가지고 있기 때문에 이 클래스를 설정파일에 등록할 때는 dataSource속성에 dataSource태그의 참조를 * 입력해 주면 된다.
즉, JdbcDaoSupport 클래스는 JdbcTemplate객체와 dataSourc객체를 모두 사용할 수 있는 객체가 된다. JdbcTemplate 을 사용하면 Connection, PreparedStatement, ResultSet 등에 대해 스프링이 제어를 해 주기 때문에 개발자는 좀더 간결한 데이터베이스 코드를 사용할 수 있게 된다.