복붙노트

[SPRING] @Autowired 여러 번 사용하기

SPRING

@Autowired 여러 번 사용하기

나는 봄이 매우 새롭기 때문에 어리석은 질문을 할지도 모른다. 그러나 어쨌든 ...

Spring MVC 4.0 애플리케이션을 구축했다.

내 설정은 다음과 같습니다.

컨트롤러 >> 서비스 >> DAO

컨트롤러 레벨에서는 약 4 ~ 5 개의 다른 @Autowired 변수를 사용합니다.

@Autowired
private ClientService clientService;
@Autowired
private CommentService commentService;
@Autowired
private SearchService searchService;

서비스 수준에서 나는 또한 몇몇 DAOs Autowire

@Autowired
SearchDAO searchDAO;

@Autowired
private ActivityDAO activityDAO;

@Autowired
private UserService userService;

나는 약 10 개의 다른 컨트롤러를 가지고 있고 대다수의 컨트롤러에서 @Autowire 같은 서비스를 제공한다. 따라서 내 질문은 괜찮습니까?

@Autowire를 필요한만큼 사용하는 것이 좋습니까? 아니면 너무 많은 메모리 사용량을 가져올 수 있습니까? 신청서에 다른 영향을 미칠 수 있습니까?

나는 봄 4.0 + 최대 절전 모드 JPA를 사용합니다.

해결법

  1. ==============================

    1.@Autowired에는 문제가 없습니다.

    @Autowired에는 문제가 없습니다.

    Autowired는 Spring 컨텍스트에서 빈을 찾고 변수에 할당한다. Service / Dao 빈의 동일한 객체를 참조하는 것입니다. 중복을 만들지 않습니다.

    하지만 너무 많은 물체를 하나의 클래스에 주입하는 것은 많은 일을하는 클래스의 표시입니다. 가능하면 클래스를 여러 클래스로 리팩토링 할 가능성을 확인하십시오.

  2. ==============================

    2.답변과 몇 가지 의견은 이미 귀하의 메모리 문제에 대한 답변을 주셨습니다. 다른 질문에 대해

    답변과 몇 가지 의견은 이미 귀하의 메모리 문제에 대한 답변을 주셨습니다. 다른 질문에 대해

    디자인 관점에서 볼 때 매우 나쁩니다. Ali Deghani는 Single Responsibility 원칙을 언급했다. 사실, 서비스를 생성자를 통해 자동 와이어 링 (autowiring)으로 필드로 autowiring하는 것에서 옮길 경우, 리팩토링을 고려해야한다면 즉시 이점을 얻을 수 있습니다.

  3. ==============================

    3.컨트롤러간에 서비스를 재사용하는 것은 괜찮습니다. 즉 컨트롤러가 "너무 뚱뚱하게"자라지 않도록 각 컨트롤러에서 몇 가지 서비스 이상을 사용하고 코드를 리팩토링하는 것을 주저합니다. 일반적으로 컨트롤러를 HTTP 세계와 Java 세계 사이의 매핑 레이어로 유지하고 모든 비즈니스 로직을 서비스 레이어로 푸시 다운하려고 노력합니다.

    컨트롤러간에 서비스를 재사용하는 것은 괜찮습니다. 즉 컨트롤러가 "너무 뚱뚱하게"자라지 않도록 각 컨트롤러에서 몇 가지 서비스 이상을 사용하고 코드를 리팩토링하는 것을 주저합니다. 일반적으로 컨트롤러를 HTTP 세계와 Java 세계 사이의 매핑 레이어로 유지하고 모든 비즈니스 로직을 서비스 레이어로 푸시 다운하려고 노력합니다.

    Spring은 기본적으로 싱글 톤 스코프 (singleton scope)를 가진 빈을 생성 할 것입니다. 즉, 동일한 빈을 여러 컨트롤러에서 자동으로 실행하면 동일한 빈 인스턴스를 공유하게됩니다.

    Autowiring 자체는 많은 메모리를 필요로하지 않으며 Java 객체 인스턴스에 대한 참조 일뿐입니다. 일반적으로 스프링 빈은 어떤 상태도 포함하지 않는다 (캐시와 데이터베이스 같은 컴포넌트에 위임한다). 그렇게하지 않으면 예외적으로 메모리 사용에 대해 걱정할 필요가 없다.

    한 가지 주목해야 할 점은 빈들 사이에 순환 종속성을 생성하지 않아야하는지 여부입니다. 필드 주입을 사용하기 때문에, Spring은 애플리케이션 초기화 중에 예외를 던질 것이므로 애플리케이션을 리팩토링해야한다.

  4. from https://stackoverflow.com/questions/35803095/using-autowired-many-times by cc-by-sa and MIT license