반응형

  두 가지 방법 중 먼저 스프링 프레임워크에서 제공하는 API를 이용한 AOP기능을 살펴보겠습니다. AOP기능을 구현하는 과정은 다음과 같습니다.

  • 타깃(Target) 클래스를 지정합니다.
  • 어드바이스(Advice) 클래스를 지정합니다.
  • 설정 파일에서 포인트컷(Pointcut)을 설정합니다.
  • 설정 파일에서 어드바이스와 포인트 컷을 결합하는 어드바이저를 설정합니다.
  • 설정 파일에서 스프링의 ProxyFactoryBean 클래스를 이용해 타깃에 어드바이스를 설정합니다.
  • getBean() 메서드로 빈 객체에 접근해 사용합니다.

  그리고 스프링 프레임워크에서 제공하는 메서드를 호출했을 때 AOP 기능을 수행하는 어드바이스 인터페이스들의 추상 메서드 기능을 정리했으니 참고하기 바랍니다.

인터페이스 추상 메서드 설명
MethodBeforeAdvice void before(Method method, Object[] args, Object target) throws Throwable 해당 메서드가 실행되기 전 실행

1. Method method: 대상 객체에서 실행된 메서드를 나타내는 메서드 객체

2. Object[] args: 메서드 인자 목록

3. Object target: 대상객체

AfterReturningAdvice

void afterReturning( Object returnValue, 

Method method,

Object[] args,

Object target)

throws Throwable

해당 메서드가 실행된 후 실행

1. Object returnValue : 대상 객체의 메서드가 반환하는 값

2. Method method: 대상 객체에서 실행된 메서드를 나타내는 메서드 객체

3. Object[] args: 메서드 인자 목록

4. Object target: 대상객체

ThrowsAdvice

void afterThrowing( Method method,

Object[] args,

Object target,

Exception ex)

해당 메서드에서 예외 발생시 실행

1. Method method: 대상객체에서 메서드를 나타내는 메서드 객체

2. Object[] args: 메서드 인자 목록

3. Object target: 대상 객체

4. Exception ex: 발생한 예외 타입

MethodInterceptor

Object invoke( MethodInvocation

invocation)

throws Throwable

해당 메서드의 실행 전/후와 예외 발생 시 실행
MethodInvocation invocation: 대상 객체의 모든 정보를 담고 있는 객체(호출된 메서드, 인자 등)

  이 중 인터페이스 MethodInterceptor는 invoke() 메서드를 이용해 다른 세 가지 인터페이스들의 기능을 동시에 수행할 수 있습니다. 

  다음 글에서는 직접 실습해 보겠습니다.

반응형

'2020 > SPRING' 카테고리의 다른 글

스프링 프레임워크 MVC 특징  (0) 2020.01.08
스프링 API를 이용한 AOP 기능 실습  (0) 2020.01.08
Spring AOP기능  (0) 2020.01.07
회원 기능 이용해 DI 실습  (0) 2020.01.07
Spring 생성자를 이용한 DI 기능  (0) 2020.01.07
블로그 이미지

꽃꽂이하는개발자

,

Spring AOP기능

2020/SPRING 2020. 1. 7. 17:39
반응형

  AOP와 관련된 여러가지 용어에 대한 설명입니다. 입문자에게는 용어의 개념을 이해하기가 다소 어려울 수 있지만 실습을 하고 나면 확실히 이해할 수 있을 것입니다. 다라서 지금은 용어 자체가 잘 이해되지 않더라도 그냥 읽고 넘어가기를 바랍니다.

용어 설명
aspect 구현하고자 하는 보조 기능을 의미합니다.
advice aspect의 실제 구현체(클래스)를 의미합니다. 메서드 호출을 기준으로 여러 지점에서 실행됩니다.
joinpoint advice를 적용하는 지점을 의미합니다. 스프링은 method 결합점만 제공합니다.
pointcut advice가 적용되는 대상을 지정합니다. 패키지이름/클래스이름/메서드이름을 정규식으로 지정하여 사용합니다.
target advice가 적용되는 클래스를 의미합니다.
weaving advice를 주기능에 적용하는 것을 의미합니다.

  스프링 프레임워크에서 AOP기능을 구현하는 방법으로는 스프링 프레임워크에서 제공하는 AOP관련 API를 이용하는 방법과 애너테이션을 이용하는 방법이 있습니다.

 

다음글에서는 스프링 API를 이용한 AOP 기능 구현 과정과 실습을 해보겠습니다.

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

앞의 글에서는 설정 파일에서 기본형 데이터를 빈의 속성값으로 직접 주입해서 사용했습니다. 이번에는 빈에 주입되는 값이 의존 관계에 있는 다른 빈을 주입하는 경우를 실습해 보겠습니다.

member.xml에서는 두 개의 빈을 동시에 생성한 후 id가 memberService인 빈이 id가 memberDAO인 빈을 자신의 속성 memberDAO에 바로 주입합니다.

  의존하는 빈을 주입할 때는 주입되는 타입이 기본형 데이터가 아닌 참조형 데이터일 경우 ref 속성을 이용해 주입해야 한다는 것을 잊지 마세요. 

  MemberServiceImpl 클래스는 다음과 같이 setter로 주입되는 빈을 받을 MemberDAO 타입의 속성과 setter를 이용해 구현합니다.

 

다음은 주입되는 빈에 해당하는 MemberDAOImpl 클래스입니다.

  실행 클래스인 MemberTest1에서는 member.xml을 읽어 들인 후 빈을 생성합니다. 그리고 setter 주입 방식으로 주입한 후 빈 id인 memberService로 접근하여 listMembers() 메서드를 호출합니다.

main() 메서드가 있는 실행 클래스(MemberTest.java)가 보이는 상태에서 실행 버튼을 클릭해 실행합니다. 이클립스 콘솔에서 MemberDAO 의 listMembers() 메서드를 호출한다는 결과를 확인할 수 있습니다.

반응형

'2020 > SPRING' 카테고리의 다른 글

스프링 API를 이용한 AOP 기능 구현 과정  (0) 2020.01.07
Spring AOP기능  (0) 2020.01.07
Spring 생성자를 이용한 DI 기능  (0) 2020.01.07
의존성 주입(DI) setter을 이용한 방식  (0) 2020.01.07
프레임워크란?  (0) 2020.01.07
블로그 이미지

꽃꽂이하는개발자

,
반응형

https://windorsky.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F

di 스프링 관련 파일은 위의 티스토리에서 다운 받으셔서 세팅해 주시면 됩니다.

 

이전 글에서는 SETTER을 이용한 DI를 실습해 보았습니다.

이번에는 생성자를 이용한 DI기능을 실습해 보도록 하겠습니다.

  person.xml을 다음과 같이 작성합니다. <bean>태그를 이용해 id가 personService1인 빈을 생성하고 <constructor-arg> 태그를 이용해 생성자 호출 시 생성자 매개변수로 <value>태그의 값을 전달하여 속성을 초기화합니다. 이처럼 PersonServiceImpl 클래스의 인자가 한 개인 생성자를 이용하여 name 속성에 <value>태그의 값이 주입됩니다. 두 번째 <bean> 태그에서는 빈 생성 시 인자가 두 개인 생성자를 호출하면서 두 개의 값을 전달하여 각각의 속성을 초기화합니다. 즉, PersonServiceImpl 클래스의 인자가 두 개인 생성자를 이용해 name과 age속성에 <value>태그의 값이 차례대로 주입됩니다.

PersonServiceImpl 클래스에서는 인자가 한 개인 생성자와 두 개인 생성자를 구현합니다.

  실행 클래스인 PersonTest2를 다음과 같이 작성합니다. id가 personService1인 빈에 접근하여 sayHello() 메서드를 호출하면 age는 0으로 출력됩니다. 반면에 id가 personService2인 빈에 접근한 후 sayHello() 메서드를 호출하면 두 속성 값이 모두 출력됩니다.

main() 메서드가 있는 실행클래스가 보이는 사애에서 시행 버튼을 클릭하여 실행한 결과입니다.

반응형

'2020 > SPRING' 카테고리의 다른 글

스프링 API를 이용한 AOP 기능 구현 과정  (0) 2020.01.07
Spring AOP기능  (0) 2020.01.07
회원 기능 이용해 DI 실습  (0) 2020.01.07
의존성 주입(DI) setter을 이용한 방식  (0) 2020.01.07
프레임워크란?  (0) 2020.01.07
블로그 이미지

꽃꽂이하는개발자

,
반응형

  의존성 주입의 두 방법인 SETTER를 이용한 방식과 생성자를 이용한 방식을 각각 실습해보겠습니다.

  이번 글에서는 setter을 이용한 방식을 사용하고 다음글에서 생성자를 이용한 di기능을 실습하겠습니다.

New-> Project를 선택한 후 java project를 선택하고 next를 클릭합니다.

프로젝트 명을 입력하시고 Finish를 클릭합니다.

이클립스에서 자바 프로젝트를 생성합니다. 자바 프로젝트 생성 시 이클립스의 Perspective를 자바 모드로 변경할지 물으면 Remember my decision 체크박스에 체크하고 Open Perspective를 클릭합니다.

그리고 pro19 아래 새 폴더 lib를 만든 후 여기에 올려놓은 스프링 DI관련 라이브러리를 다운받으신 후 복사해 붙여 넣습니다.

cglib-nodep-2.1_3.jar
0.31MB
commons-dbcp.jar
0.10MB
commons-logging.jar
0.05MB
commons-pool.jar
0.06MB
spring.jar
2.43MB

프로젝트를 선택하고 마우스 오른쪽 버튼을 클릭한 후 Build Path > Configure Build Path를 선택합니다.

libraries 탭을 선택하시고 Add Jars... 를 클릭하신후 앞에서 미리 만든 lib폴더의 라이브러리들을 모두 선택한 후 OK를 클릭합니다.

그리고 Apply and Close를 클릭하여 이 내용을 적용합니다.

Project Explorer의 Referenced Libraries에서 jar 파일들을 확인할 수 있습니다.

 

이제 DI 를 설정하겠습니다. 스프링에서 DI 설정은 XML파일에서 합니다. 따라서 빈을 설정하는 person.xml 파일을 생성합니다.

프로젝트 위에 마우스 오른쪽 버튼을 클릭한 후 New> other...를 선택하고 선택창에서 XML > XML File을 선택하고 next를 클릭합니다.

파일 이름으로 person.xml을 입력하고 Finish를 클릭합니다.

그러면 프로젝트 이름 하위에 person.xml이 생성된 것을 확인할 수 있습니다.

<bean>태그에 사용되는 여러 가지 속성들

속성 이름 설명
id 빈 객체의 고유 이름으로, 빈 id를 이용해 빈에 접근합니다.
name 객체의 별칭입니다.
class 생성할 클래스입니다. 패키지 이름까지 입력해야 합니다.
constructor-arg 생성자를 이용해 값을 주입할 때 사용합니다.
property setter를 이용해 값을 주입할 때 사용합니다.

  다음과 같이 person.xml을 작성합니다. <beans>태그로 스프링 실행 시 생성할 빈을 설정합니다. 빈은 앞에서도 언급했듯이 스프링을 실행할 때 사용하는 클래스 객체(인스턴스)입니다.

  실행 클래스 실행 시 <bean> 태그를 이용해 com.spring.ex01.PersonServiceImpl 클래스에 대한 빈을 생성합니다. 그리고 이 빈에 대해 접근할 수 있는 빈 id를 personService로 지정한 후 <property> 태그를 이용해 PersonServiceImpl 클래스 객체의 name속성에 <value> 태그의 값으로 치괗합니다. 소스 코드에서 new를 이용해 직접 객체를 생성하던 것을 person.xml에서 설정한 것입니다.

 

이번에는 실습 관련 클래스를 구현하겠습니다.

com.spring.ex01 패키지를 만들고 클래스 파일을 생성합니다.

PersonService 인터페이스를 다음과 같이 작성합니다. 인터페이스 PersonService에 추상 메서드 sayHello()를 선언합니다.

 

  PersonServiceImpl 클래스를 다음과 같이 작성합니다. 구현 클래스 PersonServiceImpl에서 인터페이스 PersonService를 구현하고 setter를 이용해 person.xml에서 <value>태그로 설정한 값을 name 속성에 주입합니다. 단, age 속성은 setter가 없으므로 빈이 생성되더라도 값이 초기화되지 않습니다.

  다음과 같이 실행 클래스인 PersontTest클래스를 작성합니다. 라이브러리에서 제공하는 클래스를 이용해 XML파일을 읽어와서 빈을 생성해 사용합니다. 실행 클래스를 실행하면 스프링의 XmlBeanFacory 클래스를 이용해 person.xml의 설정대로 PersonServiceImpl 빈을 메모리에 생성합니다. 이 빈에 대한 id인 personService로 접근하여 sayHello()메서드를 호출합니다.

콘솔에 name 속성 값은 person.xml에서 <value>태그로 설정한 값이 출력되지만 age 속성 값은 0이 출력됩니다.

 

반응형

'2020 > SPRING' 카테고리의 다른 글

스프링 API를 이용한 AOP 기능 구현 과정  (0) 2020.01.07
Spring AOP기능  (0) 2020.01.07
회원 기능 이용해 DI 실습  (0) 2020.01.07
Spring 생성자를 이용한 DI 기능  (0) 2020.01.07
프레임워크란?  (0) 2020.01.07
블로그 이미지

꽃꽂이하는개발자

,

프레임워크란?

2020/SPRING 2020. 1. 7. 10:06
반응형

  프레임워크의 사전적 의미는 '어떤 것을 구성하는 구조 또는 뼈대'입니다.

  소프트웨어적 의미로는 '기능을 미리 클래스나 인터페이스 등으로 만들어 제공하는 반제품'정도로 해석할 수 있습니다. 즉, 어느 정도 완성된 상태로 제공하는 기능인 셈입니다.

  즉 프레임워크를 사용하는 이유로 한마디로 정리하면 일정한 기준에 따라 개발이 이루어지므로 개발 생산성과 품질이 보장된 애플리케이션을 개발할 수 있기 때문입니다.

 

  스프링 프레임워크

  프레임워크 중 현재 가장 많이 사용되는 것이 스프링 프레임워크입니다. 스프링 프레임워크(이하 스프링)는 자바 웹 애플리케이션 개발을 위한 오픈 소스 프레임워크로, 기존 프레임워크보다 가벼운 경량 프레임워크입니다.

  또한 스프링은 경량 컨테이너라고도 부릅니다. '컨테이너'라고 하면 대표적인 것으로 톰캣을 들 수 있습니다. 톰캣은 서블릿 컨테이너라고 부르는데, 그 이유는 톰캣을 실행하면 톰캣은 서블릿의 생성, 초기화, 서비스 실행, 소멸에 관한 모든 권한을 가지고 서블릿이 관리하기 때문입니다.

  스프링도 마찬가지입니다. 애플리케이션에서 사용되는 여러가지 빈(클래스 객체)을 개발자가 아닌 스프링이 권한을 가지고 직접 관리합니다. 스프링 이전에 사용되던 프레임워크로 EJB(Enterprise JavaBean, 엔터프라이즈 자바빈즈)라는 것이 있는데, EJB는 실행 시 무거워 여러 가지 문제를 일으키는 단점이 있습니다. 스프링은 이런 EJB의 단점은 개선하고 좋은 점은 더 발전시켜서 탄생한 프레임워크입니다.

 

스프링의 특징

  • EJB보다 가볍고 배우기도 쉬우며 경량 컨테이너의 기능을 수행합니다.
  • 제어 역행(Ioc, Inversion of Control) 기술을 이용해 애플리케이션 간의 느슨한 결합을 제어합니다.
  • 의존성 주입(DI, Dependency Injection)기능을 지원합니다.
  • 관점 지향(AOP, Aspect-Oriented Programming) 기능을 이용해 자원 관리를 합니다.
  • 영속성과 관련된 다양한 서비스를 지원합니다.
  • 수많은 라이브러리와의 연동 기능을 지원합니다.

의존성 주입: 클래스 객체를 개발자가 코드에서 생성하지 않고 프레임워크가 생성하여 사용하는 방법입니다.

제어 역행: 서블릿이나 빈 등을 개발자가 코드에서 생성하지 않고 프레임워크가 직접 수행하는 방법입니다.

관점 지향: 핵심 기능 외 부수 기능들을 분리 구현함으로써 모듈성을 증가 시키는 방법입니다.

 

  스프링 Core 기능을 스프링의 다른 기능을 수행하는 데 필요한 기반 기능을 제공합니다. 그리고 스프링 MVC 기능을 이용해 애플리케이션을 MVC로 쉽게 개발할 수 있습니다. 그 외 스프링의 주요 기능에 대한 상세한 설명을 하겠습니다.

스프링 기능 설명
Core 다른 기능과 설정을 분리하기 위한 IoC 기능을 제공합니다.
Context 스프링의 기본 기능으로서 애플리케이션의 각 기능을 하는 빈(Bean)에 대한 접근 방법을 제공합니다.
DAO JDBC 기능을 좀 더 편리하게 사용할 수 있도록 합니다.
ORM 하이버네이트나 마이바티스 같은 영속성 관련 프레임워크와 연동된 기능을 제공합니다.
AOP 관점 지향 기능을 제공합니다.
Web 웹 어플리케이션 개발에 필요한 기능을 제공합니다.
WebMVC 스프링에서 MVC 구현에 관련된 기능을 제공합니다.

 

반응형
블로그 이미지

꽃꽂이하는개발자

,