반응형

1) @Autowired

2) setter

3) 생성자

 

이 중에서 가장 권장하는 방식 : 생성자로 주입받는 방식

lombok 어노테이션의 @RequiredArgsConstructor 에서 해결 - final 선언된 모든 필드를 인자값으로 하는 생성자를 대신생성해줌

 

그렇다면 @Autowired를 권장하지 않는 이유는 무엇일까?

- 순환 의존성 (클래스a <-> 클래스b를 서로 참조할 수 있음)

- final 선언이  아니므로 객체가 변할 수 있다.

 

이런 이유로 스프링팀에서는 생성자 방식을 권한다.

 

출처 :

스프링부트와 AWS로 혼자 구현하는 웹 서비스 - 이동욱 저

https://yaboong.github.io/spring/2019/08/29/why-field-injection-is-bad/

 

 

 

반응형

'개발공부 > Spring' 카테고리의 다른 글

예외처리(1)  (0) 2020.10.01
SPRING AOP  (0) 2018.07.02
SLF4J와 Logback  (1) 2018.06.26
Tiles란, Spring tiles3 적용법  (2) 2018.06.14
반응형

객체의 리스트 형태에서 조건에 맞는 객체를 삭제 하고 싶을때 for loop를 돌려서 삭제하는 경우가 있다.

아래의 코드는 오류가 나니 항상 주의해서 사용하여야 한다.

잘못된예 >>

List<String> names = .... 

for (String name : names) { 

                  names.remove(name);

 }

객체를 꺼내서 사용하는 대신 iterator 를 이용하여야 오류를 막을 수 있다.

List<String> names = .... 

Iterator<String> i = names.iterator(); 

while (i.hasNext()) {

                String s = i.next(); 

                i.remove(); 

}

해당 개념과 관련하여 업무상 실수를 한적이 있어 기록해둔다.

 

출처 : https://stackoverflow.com/questions/1196586/calling-remove-in-foreach-loop-in-java

반응형
반응형

Tomcat 설치 시 소스 경로를 설정할 때 두가지 방법이 있다.

 

1) {톰캣 폴더}/conf/Catalina/localhost/ROOT.xml 에 해당 경로를 넣는 방법 - 이때 유의해야 할것은 server.xml 의 Host 경로를 수정하지 말아야 한다는 점이다.

 

ROOT.xml 파일 내용를 아래와 같이 설정한다.

<Context docBase="{해당 소스가 위치한 경로를 넣어준다}" reloadable="true" privileged="true" antiResourceLocking="false" useHttpOnly="false"> </Context>

 

2) server.xml 에서 직접 설정해준다. 단, 붉은 색으로 표시한 컨텍스트 패스를 함께 설정해주어야 오류가 나지 않는다.

<Host name="localhost" appBase="{해당 소스가 위치한 경로를 넣어준다}" unpackWARs="false" autoDeploy="false">

<Context path="" docBase="" reloadable="true" />

 

 

반응형

+ Recent posts