Programming/Spring framework 40

자동 의존 주입 @Autowired 의 실질적 적용 (세터 메서드, 필드). 2021-11-11

우선 처음부터 난관에 부딪혔는데, 이클립스에 메이븐 프로젝트를 import하는 과정에서 pom.xml 파일을 POM.xml 이렇게 대문자로 저장해서 처음엔 임포트가 되지 않았지만 해결했다. 우선 @Autowired는 일반 클래스에 의존 주입이 필요한 "필드" 나 "메서드"에 사용된다. 필드에는 지난 포스팅에서 보여줬듯이. public class MemberRegisterService { @Autowired private MemberDao memberdao; public MemberRegisterService(MemberDao memberdao) { this.memberdao = memberdao; } public MemberRegisterService() { // TODO Auto-generated co..

스프링 설정 클래스에서 @Autowired를 통한 자동 DI, 설정메서드(세터) 형식의 DI, 두개 이상의 설정 클래스로 스프링 컨테이너 만들기. 2021-10-22

스프링에서 DI 방식은 크게 생성자 주입 방식도 있고, 세터 메서드를 통해서 의존 주입도 가능하다. @Configuration public class AppCtx1 { @Bean public MemberDao memberdao() { MemberDao m=new MemberDao(); return m; } @Bean public MemberRegisterService mrsvc() { MemberRegisterService mrsvc=new MemberRegisterService(memberdao()); //생성자를 통한 DI return mrsvc; } @Bean public PasswordChangeService pcsvc() { PasswordChangeService pcsvc=new Passwor..

스프링의 역할: 객체 조립기(@Configuration)

지난 포스팅에서 자바 개발할때, 유지보수를 쉽게 하기 위해서 DI를 전담하고, 의존 대상이 되는 객체들을 미리 생성한 클래스인 Assembler를 만들었다. DI를(나중에 공부할 @AutoWired 를 통해 가능) 한 클래스 내에서 모두 처리할수 있고, 미리 의존대상이 되는 객체를 만들어놓기 때문에 유연한 개발이 가능하다. 그렇다면 이렇게 장황하게 객체 조립기에 대해 설명한 이유가 무엇일까? 눈치빠르면 바로 이해한다ㅋㅋ 바로 스프링은 객체 조립기의 기능을 제공한다는 것이다. 우선 스프링 컨테이너라는 것이 있는데, 여기에 스프링 설정클래스를 통해 등록된 빈 객체 들이 서로서로 DI를 자동으로 해주고, 또한 해당 객체가 필요할때마다 스프링 컨테이너(ApplicationContext)에 구현된 getBean ..

객체 조립기(Assembler)의 필요성. 2021-10-18

시작하기전에 간단히 설명하자면, 회원등록서비스, 비번변경서비스 등을 만들어서 Main 메서드에 실행하려 한다. public class Main { public static void main(String[] args) { // TODO Auto-generated method stub MemberDao memberdao=new MemberDao(); MemberRegisterService mrs=new MemberRegisterService(memberdao); PasswordChangeService pcs=new PasswordChangeService(memberdao); mrs.registermember(new Member(1,6429)); mrs.registermember(new Member(2,920..

메이븐프로젝트의 식별자: 아티팩트ID 2021-10-13.

나는 의문점이 들었다. 만약 똑같은 POM.xml 파일로 컴파일된 메이븐 프로젝트는 루트폴더의 이름만 바꾼뒤, 이클립스에 import가 될까? 이런 삽질? 을 한 이유는 메이븐 프로젝트를 구별할수있는 지표가 무엇인지 궁금했던거 같다. 그래서 난 chap03 의 POM.xml을 똑같이 사용해서 다시 만든 메이븐 프로젝트로 루트폴더이름만 다르게 해서 이클립스에 import 했을때는 이미 존재하는 아티팩트 ID 이기에 이클립스에 임포트 할수 없다고 나왔다. 그래서 난 어? 그럼 아티팩트 ID만 바꾼다면 다시 삽입되지 않을까? 라는 생각과, 그렇다면 아티펙트 ID가 메이븐 프로젝트를 개별적으로 구별해주는 지표인가? 라는 궁금증이 들었다. 메이븐 설정파일인 POM.xml에서 4.0.0 sp5 sp5-chap03 ..

윈도우 콘솔창에서 메이븐 프로젝트 컴파일하기. 2021-10-12

우선 지난포스팅에 말했듯이, 메이븐 프로젝트를 컴파일 하기 위해서는 윈도우 콘솔창의 지정한 위치에 메이븐의 기본폴더 구조와 POM.XML파일을 갖추고 있어야 한다. 처음엔 콘솔창에 해당 프로젝트 루트폴더가 있는 곳에서 mvn compile 이란 명령어를 실행했지만, 'mvn은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 라는 오류 메세지가 나왔다. 그래서 책 찾아보니, 메이븐 사이트에서 다운받은 메이븐 이 내 컴퓨터의 PATH 환경변수의 경로가 올바르지 않을 경우 이런 에러 메세지가 나온다고 했다. 그래서 확인해보니 [메이븐 설치폴더]\bin 경로가 아예 존재하지 않아서 추가해주었다. 그런다음 다시 콘솔창에서 프로젝트 루트폴더에서 mvn compile을 하니 정상적..

복습 chap 02. , 이클립스에 메이븐 프로젝트 import. , 이클립스와 자바 프로젝트와의 관계, 인텔리제이와 이클립스의 관계.

메이븐의 기본 폴더 구조. spring5 -spring5-chap2(메이븐 루트폴더) -src -main -java(실질적인 자바 코드가 들어가는곳) -resources(자바코드외 프로퍼티 파일이나 XML 파일이 들어가는곳.) Pom.xml( 모든 메이븐 프로젝트에는 루트폴더에 프로젝트의 설정을 정의한 POM.xml 파일이 들어가있음.) 객체의존 이란 한 클래스가 다른 클래스의 메서드를 실행할때, 서로 의존관계에 있다고 말한다. 객체의존이 사용되었을경우, 의존대상이 되는 객체의 변경이 일어났을때, 필연적으로 의존하는 객체의 코드 변화가 있을수 밖에 없는데, 이를 최소화 하기 위한 방법으로는 DI 라는 방법을 쓴다. 객체의존을 구현하는 방법은 크게 두가지가 있는데, 1. 직접 생성자를 통해 의존대상이되는 ..

한가지 Pointcut으로 여러 Aspect를 사용하기, 프록시 적용순서. 2021-06-09

우린 앞전에 @Pointcut 설정을 하면서, excution 명시자에 대해서 쓴 적이 있다. 간단히 설명하자면, excution 명시자는 Adivce를 적용할 메서드를 지정할때 사용한다. 간단히 말해서 Pointcut은 "where" 이고, Advice는 "when"이다. 그런데 Advice를 Aspect의 실질적인 적용이라 해도 무방하다. 이유는 애초에 @Around 가 붙은 메서드에서 공통의 기능을 실행하고, 대상객체의 메서드도 호출하여서, 앞/뒤, 익셉션 유무등에 따라 코드를 짤수 있기 때문이다. 즉, Advice의 적용은 Aspect 의 적용이다. @Around 애너테이션에 공통의 기능과 "when" 그것을 실행할지 구현하기 때문이다. 그래서 Pointcut이 정하는 범위는 그냥 Advice의 ..

스프링의 프록시 생성방식과 적용 실제 main 함수 사례. 2021-06-08

우선 이전 포스트의 빈 설정 클래스를 보자. @Configuration @EnableAspectJAutoProxy public class Appctx { @Bean public ExeTimeAspect exeTimeAspect() { return new ExeTimeAspect(); } @Bean public Calculator calculator() { return new RecCalculator(); } } 이렇게 빈 객체 설정을 완료한 후, 대상객체를 calculator(), 프록시를 exeTimeAspect()로 하는 스프링 AOP를 실제로 main 메서드에 적용해서 함수의 작동시간을 알아보는 코드를 보자. public class MainAspect { public static void main(..

스프링 AOP의 기본 개념: Advice, joinpoint,Pointcut,Aspect 2021-06-07

우선 이전 포스트에서 AOP(Aspect oriented programing)이란 공통의 기능과 핵심기능의 분리를 통해 재사용성을 높여주는 프로그래밍 기법이라고 설명하였고, 스프링은 AOP를 프록시를 통해 구현한다고 설명하였다. 일반적인 AOP구현 방식은 총 3가지 방법이 있다. 1.컴파일 시점에 공통의 기능을 구현한 코드를 넣어준다. 2.클래스 로딩 시점에 바이트 코드에 공통의 기능을 구현한 코드를 넣어준다. 3.런타임 중 프록시 객체를 생성해서 공통의 기능을 삽입한다. 이 3가지 방법중 스프링에서 사용하는 방식은 3번이다. 스프링 AOP는 프록시 객체를 자동으로 만들어서 필요한 시점(PointCut)에 실행해준다. 그래서 공통기능을 구현한 클래스만 알맞게 구현하면 된다. 우선 스프링의 AOP의 용어들..