Develop/Spring framework

[Spring] @Autowired

자라선 2020. 7. 31. 11:55

@Autowired

@Autowired는 스프링의 DI에 사용되는 특별한 어노테이션이다.

 

@Autowired가 붙은 변수가 있으면 테스트 컨텍스트 프레임워크는 변수 타입과 일치하는 컨텍스트 내의 빈을 찾으며 타입이 일치하는 빈이 있으면 변수에 대입해준다.

같은 타입의 빈이 2개이상이면 변수명으로 비교하고, 그마저도 문제있으면 예외를 발생시킨다.

일반적으로 주입을 위해 생성자나 수정자 메소드 같은 메소드가 필요하지만 @Autowired는 필요없이 주입이 가능하다.

또 별도의 타입정보를 이용해 빈을 자동으로 가져올 수 있는데, 이런 방법을 타입에 의한 자동 와이어링이라고 한다.

	@Autowired
	private ApplicationContext context;
 	<bean id='dataSource' class='org.springframework.jdbc.datasource.SimpleDriverDataSource'>
 		<property name='driverClass' value='com.mysql.jdbc.Driver' />
		<property name="url" value="jdbc:mysql://serverIP:3306/toad" />
		<property name="username" value="root" />
		<property name="password" value="password" />
	</bean>
	
	<bean id='userDao' class='com.Spring.User.dao.UserDao'>
		<property name='dataSource' ref='dataSource' />
	</bean>

그런데 위의 경우 applicationContext.xml에 ApplicationContext 타입의 빈이 보이지 않는데 가져올수 있었다.

그 이유는 스프링 자체에서 스프링 어플리케이션 컨텍스트는 초기화 할 때 자기 자신도 빈으로 등록하기 때문이다.

this.userdao = context.getBean("userDao", UserDao.class);

그래서 위의 코드와 같이 빈을 불러와 사용할수가 있었다.

이밖에도 굳이 ApplicationContext의 타입을 가져와 등록하는게 아닌

전역 변수인 UserDao를 @Autowired 로 선언하여 ApplicationContext.xml에 정의된 빈을 가져와 사용할수도 있다.