반응형

@Resource 어노테이션

자바 표준,이름으로 찾을때

JSR-250 표준 어노테이션에 속한다.

의존성을 찾는 순서

  1. 이름
  2. 타입
  3. 지정자

@Inject 어노테이션

자바 표준,타입으로 찾을 때

JSR-330 표준 어노테이션에 속한다.

의존성을 찾는 순서

  1. 타입
  2. 지정자
  3. 이름

@Autowired 어노테이션

스프링 표준,타입으로 찾을때

@Autowired 어노테이션은 @Inject 어노테이션과 유사하다.

의존성을 찾는 순서

  1. 타입
  2. 지정자
  3. 이름

참고문헌

https://hilucky.tistory.com/254 [Spring] @Resource, @Inject, @Autowired]
https://www.baeldung.com/spring-annotations-resource-inject-autowire [영문 가이드]

반응형

'Spring > spring framework 기본 및 이론' 카테고리의 다른 글

[Spring] AOP 포인트컷 표현식  (2) 2020.05.15
[Spring] 스케쥴 설정  (0) 2020.05.15
@Autowired @Resource @Inject 차이  (0) 2020.05.10
component 과 bean 의 차이점  (0) 2020.05.10
localeResolver 란  (0) 2020.05.10
반응형

차이

  Autowired Inject Resource
범용 스프링전용 자바에서 지원 자바에서 지원
연결방식 타입에 맞춰서 연결 타입에 맞춰서 연결 이름으로 연결
강제연결 @Qualifier("title")   @Resource(name="title")
@Autowired와 @Inject는 타입에 맞춰서 하는 반면, @Resource는 이름에 맞춰서 연결      

@Autowired

private Chicken penguin;  //Chicken 타입으로 연결

@Inject

private Penguin chicken; //Penguin 타입으로 연결

@Resource

private Chicken penguin;  //penguin 타입으로 연결됩니다만, Chicken 클래스를 자료형으로 두었기에 캐스팅이 되지 않아 에러가 난다.

@Resource

private Bird penguin;      //penguin 타입으로 연결되어 호출해보면 penguin 클래스의 값을 호출

Resource를 추천.

어느 프레임워크에 종속적이지 않기 때문에

이것또한 Bean를 생성하며 싱글톤 패턴이 자동으로 적용.

타입으로 연결 하기 때문에 같은 타입인 여러개의 필드는 오류가 날 것 이다.

반응형

'Spring > spring framework 기본 및 이론' 카테고리의 다른 글

[Spring] 스케쥴 설정  (0) 2020.05.15
[Spring] @Resource @Inject @Autowired 차이  (0) 2020.05.15
component 과 bean 의 차이점  (0) 2020.05.10
localeResolver 란  (0) 2020.05.10
spring webjars란  (0) 2020.05.08
반응형

Bean 과 Component 의 차이점

@Bean의 경우 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용된다.
@Bean은 @Configuration으로 선언된 클래스 내에 있는 메소드를 정의할 때 사용한다. 이 메소드가 반환하는 객체가 bean이 되며 default로 메소드 이름이 bean의 이름이 된다.


@Bean

setter나 builder 등을 통해서

사용자가 프로퍼티를 변경해서 생성한 인스턴스를

Spring에게 관리하라고 맡기는 것이다.

개발자가 직접 컨트롤이 가능한 Class들의 경우엔 @Component
@Component 의 종류에는 @Repository @Service @Controller 로 나뉜다.


@Component는

클래스를 Spring에게 알아서

**인스턴스 생성**및**Bean 등록**하는 과정을 맡기는 것이다.

개발자가 생성한 Class에 @Bean은 선언은 안된다.

개발자가 생성한 class에 @Component 를 선언한다.

반응형

'Spring > spring framework 기본 및 이론' 카테고리의 다른 글

[Spring] @Resource @Inject @Autowired 차이  (0) 2020.05.15
@Autowired @Resource @Inject 차이  (0) 2020.05.10
localeResolver 란  (0) 2020.05.10
spring webjars란  (0) 2020.05.08
servelt context 사용  (0) 2020.05.08
반응형

js 및 css 스크립트 라이브러리 로드 할 경우 방법

  1. 다운받아서 로컬에 풀기
  2. CDN 주소 사용
  3. bower, grunt, yeoman 같은 프론트 엔트 package manager 사용

WEBJARS 란

webjars 는 jar 파일로 프론트 엔트 리소스를 가져오게 하는 라이브러리이다.

결국 webjars 안에서도 bower 라는 패키지 매니저를 사용 해야함. npm도 있음.

<dependency>
    <groupId>org.webjars.bower</groupId>
    <artifactId>jquery</artifactId>
    <version>2.1.3</version>
</dependency>
<dependency>
    <groupId>org.webjars.bower</groupId>
    <artifactId>bootstrap</artifactId>
    <version>3.3.4</version>
</dependency>

사용방법

<link rel="stylesheet" href="/webjars/bootstrap/3.3.4/dist/css/bootstrap.min.css">
<script src="/webjars/jquery/2.1.3/dist/jquery.min.js"></script>
<script src="/webjars/bootstrap/3.3.4/dist/js/bootstrap.min.js"></script>

빌드를 하면 /resources 경로에 webjars 라는 경로로 라이브러리가 압축이 풀린다.

스프링부트에서는 JARs 에 있는 클래스패스 /META-INF/resources/webjars 를 /webjars 로 요청을 연결하도록 자동구성된다.

프로젝트 구성이 프론트 엔드 구성이 따로 되어 있으면 프론트 엔드 빌드 툴 사용 권장!

참고문헌

http://millky.com/@origoni/post/1147 [webjars를 이용한 bootstrap, jquery 적용해보기]

반응형

'Spring > spring framework 기본 및 이론' 카테고리의 다른 글

component 과 bean 의 차이점  (0) 2020.05.10
localeResolver 란  (0) 2020.05.10
servelt context 사용  (0) 2020.05.08
스프링 이해하기  (1) 2020.05.07
스프링 jdbc 이해하기  (0) 2020.05.07
반응형

DispatcherServlet 순서도

 

  1. 클라이언트(사용자)의 모든 요청은 DispatcherServlet이 받는다.
  2. DispatcherServlet은 hanlderMapping을 통해서 요청에 해당하는 Controller를 실행 시킨다.
  3. Controller는 적절한 서비스 객체를 호출 시킨다.
  4. Service는 DB처리를 위해 DAO를 이용하여 데이터를 요청 한다.
  5. DAO는 mybatis를 이용하는 Mapper를 통해 작업 처리를 한다.
  6. 결과(처리한 데이터)가 mapper->DAO->Service->Controller로 전달된다.
  7. Contorller는 전달된 결과(처리된 데이터)를 View Resolver를 통해
    전달 받을 View가 있는지 검색한다.
  8. 전달 받은 View가 있다면 View에게 전달된 결과(처리된 데이터)를 전달한다.
  9. View는 전달받은 결과(처리된 데이터)를 다시 DispatcherServlet에게 전달한다.
  10. DispatcherServlet은 전달받은 결과(처리된 데이터)를 클라이언트에게 전달한다.

Front Controller의 역할은 서버로 들어오는 모든 요청을 받아서 처리한다.

스프링에서 제공하는 FrontController인 DispatcherServlet의 역할은??

DispatcherServlet의 등장으로 엄청나게 web.xml의 역할이 축소 되었다.

DispatcherServlet가 있기전에는 사용자의 URL을 일일이 요청을 처리하기 위해
web.xml에 등록(서블릿과 매핑시켜주는 작업)을 반드시 해야했다.
그렇다고 web.xml이 안쓰이는 것은 아니다.

web.xml에서 자주 쓰이는 서블릿 매핑을 DispatcherServlet이 한다고 생각하시면 되고
나머지 web.xml의 기능들은 그대로 web.xml을 이용하신다고 생각하시면됩니다.
(web.xml의 기능은 DispatcherServlet등록, 객체의 URL범위 , 필터 등이 있습니다.)

스프링 MVC Controller의 특징

  1. 파라미터 수집
  • 사용자의 요청에 필요한 데이터를 추출하고
    VO(DB의 레코드와 상응되는 클래스) 나 DTO(컨트롤러,뷰,비즈니스등의 계층간 데이터 교환을 위한 자바빈즈)로 변환하는 파라미터의 수집 작업을 한다.
  1. 애노테이션을 통한 간편 설정
  • 스프링 MVC 설정은 MVC나 애노테이션을 사용가능하고, 주로
    애노테이션을 이용하여 클래스나 메소드의 선언에 필요한 애노테이션을 추가하는
    작업을 통해 요청이나 응답에 필요한 모든 처리를 완료할 수 있다.

  3.테스트의 편리

  • WAS의 실행없이도 테스트할 수 있는 편리한 방법을 제공

servlet-context.xml 사용

프로젝트 생성시 DispatcherServlet인

spring-servlet-context-xml

  • 클래스 선언에 애노테이션을 이용해서 컨트롤러를 작성 가능하게 한다.
  • 웹 이미지/CSS/javaScript 파일과 같이 고정된 자원들의 위치

(스프링 MVC패턴 자체가 디스패처 서블릿이 모든 요청을 컨트롤러에게 넘겨주는 방식인데 css등의 요청들도 컨트롤러에게 넘겨주면 컨트롤러가 해야할 일도 아니지만 컨트롤러는 해당하는 요청이 없기 때문에 에러가 날 것이다. 만약 정상작동 하더라도 JSP안의 CSS나 자바스크립트등을 디스패처 서블릿이 가로채가서 원하는 화면이 안나올 것이다. 이를 해결하기위해 resources가 있는것)

-패키지 내부의 클래스(클래스 패스에 위치해있는 클래스)들을 조사하는 것으로
만약 과 같이 사용하게 된다면
특정한 애노테이션이 붙은 클래스를 자동으로 빈으로 등록하는 기능을 제공한다.

반응형

'Spring > spring framework 기본 및 이론' 카테고리의 다른 글

localeResolver 란  (0) 2020.05.10
spring webjars란  (0) 2020.05.08
스프링 이해하기  (1) 2020.05.07
스프링 jdbc 이해하기  (0) 2020.05.07
스프링_IOC개념  (0) 2020.05.07
반응형

1. 스프링의 이해

1.1) 스프링 정의

  • 간단히 스프링이라 지칭하지만 정확하게는 스프링 프레임워크 (Spring Framework) 라고 하는 것이 정확한 표현.'
  • 자바(JAVA) 플랫폼을 위한 오픈소스(Open Source) 애플리케이션 프레임워크(Framework)

  • 자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크

  • 자바 개발을 위한 프레임워크로 종속 객체를 생성해주고, 조립해주는 도구

  • 자바로 된 프레임워크로 자바SE로 된 자바 객체(POJO)를 자바EE에 의존적이지 않게 연결해주는 역할.

2. 스프링 장점

1. 경량 Container

  • Java 객체를 담고 있으며, 생성 ~ 소멸과 같은 라이프 사이클을 관리하며 Spring Container로 부터 필요한 객체를 가져와 사용한다.

  • EJB에 비해 가볍기 때문에 엔터프라이즈급의 시스템을 더 빠른 시간에 작성 가능.

2. DI (Dependency Injection) 지원

객체와 객체간의 의존을 의미,

A라는 클래스에서 B라는 클래스의 메소드를 불러와 실행하게 될 때 그것을 의존한다 생각하면 된다.

그런데 B클래스의 메소드 이름이 바뀌어 버리면 어떻게 될까? A에서는 그 메소드를 찾을 수 없기 때문에, 똑같이 변경해야 한다.

1 ~ 2개의 클래스로 구성된 의존 메소드가 바뀌면 직접 변경해 줄텐데, 그 이상을 사용했다면 변경하기 정말 힘들것이다.

  • Spring Framework에서 DI (Dependency Injection) 란?

위에서 언급 했듯이 기본 방식으로 메소드를 다른 클래스에서 같이 사용하면, 직접적으로 연결되어 있어 유지보수의 어려움을 갖는다.

그래서 Spring Framework 에서 제공하는 DI를 이용하게 되는것인데,

DI의 역활은 기본 방식의 의존성을 제거하고, 별도로 3자가 만들어주는 의존객체를 각 클래스에 뿌려주는 기능으로 변경의 유연성을 제공한다.

보통 1) 생성자를 이용한 주입

1) 생성자를 이용한 주입

2) set 메소드를 활용한 주입

3. AOP(Aspect Oriented Programming, 관점지향 프로그래밍) 지원

한 어플리케이션 내의 다양한 모듈에서 공통적으로 이용되는 기능을 분리시켜 사용하는 것.

모듈의 핵심 기능 외의 기능을 해당 모듈에 응집되지 않도록 하기 위한 기술

Java는 하나의 클래스에 대한 수직적인 흐름만 제어 할 수 있는 반면,

Spring을 쓰면 특정 클래스들에 대한 수평적인 제어가 가능해진다.

공통된 부분등, 특정 부분들(핵심 관심사) 로 나누어 관리함으로써,프로그램을 모듈화 하는 방식.

4. POJO (Plain Old Java Object) 지원

Java의 객체지향적인 특징을 살려 비즈니스 로직에 출싱한 개발이 가능하도록 하는 것

  • POJO(Plain Old Java Object)를 사용하는 이유?

코드의 간결함 (비즈니스 로직과 특정 환경 / low레벨의 중속적인 코드를 분리하므로 단순함)

자동화 테스트에 유리 (환경 종속적인 코드는 자동화 테스트가 어렵지만, POJO는 테스트가 간단함)

객체지향적 설계의 자유로운 사용

5.트랜잭션의 지원

※ 트랜잭션이란 : 데이터 베이스에서 한꺼번에 수행되어야 될 연산.

스프링은 이를 어노테이션이나 xml로 설정 가능.

반응형

'Spring > spring framework 기본 및 이론' 카테고리의 다른 글

localeResolver 란  (0) 2020.05.10
spring webjars란  (0) 2020.05.08
servelt context 사용  (0) 2020.05.08
스프링 jdbc 이해하기  (0) 2020.05.07
스프링_IOC개념  (0) 2020.05.07

+ Recent posts