key가 String, value가 String인 맵 형태의 객체
setProperty(key) 값 설정
getProperty(key) 값 반환
props.stringPropertyNames(); 키값 반환
config.xml
<property name="phones">
<props>
<prop key="one">010</prop>
<prop key="two">011</prop>
<prop key="three">018</prop>
</props>
</property>
나중에 xml의 bean관련은 전부 자동화할 것이다.
그러니 개념만 잘 잡고 나중에 오류 발생시 잡을 수만 있게 되면 된다.
<bean class="com.dto.Student" id="stu" scope="singleton"></bean>
상단에 <beans default-autowire="byType"> 가 선언되어 있다면,
<bean>을 이용해 객체를 생성할 때마다 선언하지 않은 멤버변수가 있다면 set함수를 이용하여 생성.
주의점 : 멤버변수로 객체를 필요로할 경우 bean을 통해 객체가 생성되어있어야한다.
주의점2 : 만약 가져올 객체에 대한 선택지가 2개 이상이 있다면 오류 발생한다.
expected single matching bean but found 2: xx,cat2주입할 클래스의 멤버변수 이름 = 주입당할 객체(빈)의 id값이 같아야한다.
즉, 클래스의 멤버변수 이름과 동일한 id를 가진 빈이 없다면 에러가 발생한다.
어떤 에러가 발생하나 ?
NullPointerException 이 발생.NullPointerException이 발생하였고, autowire 값을 byName으로 사용하고 있다면 id가 일치하는 빈이 없을 가능성이 있다는 것이다.default-autowire 없이 각 bean에 autowird=""를 선언
autowire-candidate="false" 선언
primary="true" 선언
서로 다른 xml에서도 같은 파일처럼 작용이 가능
최대한 모든 멤버변수를 포함하는 생성자를 사용.
없을수록 적은 인자를 필요로하는 생성자를 사용.
하나도 없으면 기본생성자 사용.
<context:annotation-config/> 가 필수적으로 들어가야 사용할 수 있다.
namespace에서 context 선택
클래스의 setXxx()함수 위에 사용
기능 : 필수 속성이 되게 한다.
setter에 사용되어서 있는지 아닌지 확인이 어렵다.
속성 또는 생성자, setter 메소드에 설정, 필수 속성이다.
required=false 로 필수 속성 해제가능
autowire="byType"과 동일한 기능
배열, 컬랙션 모두 설정 가능하다.
byType + @Reuired 가 합쳐진 기능
주의점 : 주입받을 빈이 없거나 2개 이상이면 오류 발생
주의점2 : setter로 주입하는 것이 아닌, @Autowired가 위치한 곳에 바로 주입된다.
멤버변수가 private인 상태여도 주입이 된다.
@Autowired(required=false)
사용시 null이 들어갈 수 있다.
없다면 주입받을 빈이 없을 때 오류를 낸다.