依赖注入:我们托管给spring核心容器的类中存在属性,需要Spring在创建该类的实例的时候随便给这个对象的属性赋值,这就是依赖注入。
使用有参构造进行属性注入 constructor-arg标签属性 name:类的属性名
<bean id="memberController" class="com.angen.controller.UserController">
<constructor-arg name="memberService" ref="memberService"></constructor-arg>
</bean>
<bean id="memberService" class="com.angen.service.impl.MemberServiceImpl">
</bean>
public class UserController {
private MemberService memberService;
private UserController(){}
public UserController(MemberService memberService) {
this.memberService = memberService;
}
public void user(){
Member user = memberService.getUser();
System.out.println(user);
}
}
实际开发中,我们是使用set方法进行有参构造
<bean id="memberController" class="com.angen.controller.UserController">
<!--<constructor-arg name="memberService" ref="memberService"></constructor-arg>-->
<property name="memberService" ref="memberService"></property>
</bean>
<bean id="memberService" class="com.angen.service.impl.MemberServiceImpl">
</bean>
public class UserController {
private MemberService memberService;
private UserController(){}
public UserController(MemberService memberService) {
this.memberService = memberService;
}
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
public void user(){
Member user = memberService.getUser();
System.out.println(user);
}
}
property标签:
注入的属性类型:
1,对象(spring核心容器中的对象)类型,使用ref属性=对象的id
2,简单类型 value属性=值
<bean id="memberController" class="com.angen.controller.UserController">
<!--<constructor-arg name="memberService" ref="memberService"></constructor-arg>-->
<property name="memberService" ref="memberService"></property>
<property name="username" value="张三"></property>
<property name="password" value="123456"></property>
</bean>
<bean id="memberService" class="com.angen.service.impl.MemberServiceImpl">
</bean>
public class UserController {
private MemberService memberService;
private String username;
private String password;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
private UserController(){}
public UserController(MemberService memberService) {
this.memberService = memberService;
}
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
public void user(){
Member user = memberService.getUser();
System.out.println(user);
}
}
3,数组或者map类型
<bean id="memberController" class="com.angen.controller.UserController">
<!--<constructor-arg name="memberService" ref="memberService"></constructor-arg>-->
<property name="memberService" ref="memberService"></property>
<property name="username" value="张三"></property>
<property name="password" value="123456"></property>
<property name="array" >
<array>
<value>1</value>
<value>4</value>
<value>3</value>
<value>2</value>
</array>
</property>
</bean>
<property name="map">
<map >
<entry key="username" value="张三"></entry>
<entry key="password" value="123456"></entry>
</map>
</property>
百度一下,p命名空间注入,了解即可。
注解方式进行依赖注入
1,注入对象类型的属性
@Autowired:自动装配,如果Spring核心容器中,只有一个该类型的对象,则自动把那个对象注入给属性。
假如有多个该类型的对象,就会根据属性名来匹配实现类对象的类名,匹配上哪个就是哪个,
或者通过@Qualifier注解手动指定注入哪个对象。
还或者使用@Resource也可以注入,并且可以通过name指定注入哪个对象。(这个注解是JDK原生的注解)。
2,注入一个简单类型的属性
@Value注解注入即可