@Resource @Autowired @Inject 의 공통점 :
특정 Bean 기능을 수행하기 위해 기능에 필요한 특정 Bean을 참조해야 하는 경우가 많이 발생함.
그럴때 사용하는 것이 @Resource @Autowired @Inject 의 anotation
@Resource | @Autowired | @Inject | |
설명 | Java 지원 anotation | spring Framework에서 지원하는 Dependency (의존도 주입 ) 용도. 자동주입되며, 종속적 | Java 지원 anotation |
사용위치 | 필드, 한개의파라미터인 비어있는 프로퍼티 setter 메소드 | 필드 , 생성자 , 여러개인 피라미터 메소드 |
필드 , 생성자 , 메소드 |
연결또는 검색방식 | 이름으로 연결 , 안되면 타입. | 타입으로 연결 안되면 이름 | 타입으로 연결 안되면 이름. |
특이사항 | 스프링프레임워크 종속적 | ||
강제연결하기 | @Resource(name="title") | @Qualifier("title") |
@Resource :
name으로 DI를 가능케함. 자바에서 지원하는 어노테이션, 프레임워크 *종속적이지 않아 많이 사용한다.
*종속적 : 어떤 것에 딸려 붙어있는, 또는 그런것.
필요로 하는 지원을 쓰기위해 어노테이션을 추가해 DI (의존도주입)을 한다.
Bean을 생성해주며 싱글톤 패턴이 자동으로 적용이 된다고 생각하면 된다.
@Autowired
type으로 DI를 가능케한다. SpringFramework에서 지원하는 어노테이션, framework에 종속적
추천하지않는 이유 : SpringFramework 사용도중 , 다른 framework로 수정할 경우, 많은 리소스 발생. 양이 방대할수록 답이없다. Bean을 생성하며, 싱글톤 패턴이 자동적으로 적용됨 타입으로 연결하기 때문에 같은타입인 여러개의 필드는 오 류발생.. 강제 연결시 @Qualifier를 사용하면 됨. 이름을 붙여서 사용해야함.
@Inject :
name으로 DI를 가능케하며, Java에서 지원하는 어노테이션, Framework에 비 종속적임.
@Resource랑 다를게 없지만, 차이점을뽑자면 Java에서 지원하는 어노테이션이지만 "타입으로 연결"