UserDao.java
package com.atguigu.Ioc_02;
public class UserDao {
}
UserService.java
package com.atguigu.Ioc_02;
public class UserService {
private UserDao userDao;
private int age;
private String name;
public UserService(UserDao userDao){
this.userDao = userDao;
}
public UserService(int age, String name, UserDao userDao){
this.age = age;
this.name = name;
this.userDao = userDao;
}
}
MovieFinder.java
package com.atguigu.Ioc_02;
public class MovieFinder {
}
SimpleMovieLister.java
package com.atguigu.Ioc_02;
public class SimpleMovieLister {
private MovieFinder movieFinder;
private String movieName;
public void setMovieFinder(MovieFinder movieFinder){
this.movieFinder = movieFinder;
}
public void setMovieName(String movieName){
this.movieName = movieName;
}
}
resources文件夹下的 xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
引用 和 被引用的组件,必须全部在Ioc容器中,不能乡愁
springIoc是一个高级容器,内部会有缓存动作,
1、先创建对象(Ioc)
2、再进行属性赋值(DI)
1、单个构造函数参数注入
<bean id="userDao" class="com.atguigu.Ioc_02.UserDao" />
<bean id="userService" class="com.atguigu.Ioc_02.UserService">
<!--
<constructor-arg:构造函数传值 DI的配置
value = 直接属性值(String name = "二狗子",int age = 18)
ref = 其他bean的Id
-->
<constructor-arg ref="userDao"/>
</bean>
2、多个构造函数参数注入
<bean id="userService1" class="com.atguigu.Ioc_02.UserService">
方案1:按照,构造函数参数的顺序,填写值
<constructor-arg value="18"/>
<constructor-arg value="二狗子"/>
<constructor-arg ref="userDao"/>
</bean>
<bean id="userService2" class="com.atguigu.Ioc_02.UserService">
方案2:按照,构造函数参数的名字(name=构造参数的参数名),填写值
<constructor-arg name="age" value="18"/>
<constructor-arg name="name" value="二狗子"/>
<constructor-arg name="userDao" ref="userDao"/>
</bean>
<bean id="userService3" class="com.atguigu.Ioc_02.UserService">
方案3:按照,构造函数参数的下角标(从左到右,从0开始),填写值
因为,public UserService(int age, String name, UserDao userDao)
所以,age的下角标是0,name的下角标是1,userDao的下角标是2
<constructor-arg index="0" value="18"/>
<constructor-arg index="1" value="二狗子"/>
<constructor-arg index="2" ref="userDao"/>
</bean>
3、触发setter方法,进行依赖注入
<bean id="movieFinder" class="com.atguigu.Ioc_02.MovieFinder"/>
<bean id="simpleMovieLister" class="com.atguigu.Ioc_02.SimpleMovieLister">
name: 属性名(setter方法的 去掉“set”和首字母小写的值)
如:public void setMovieFinder(MovieFinder movieFinder)
此时,name = movieFinder
value=“直接属性值” 和 ref=“其他bean的Id”,
value、ref这两二选一
<property name="movieFinder" ref="movieFinder"></property>
<property name="movieName" value="西红柿首富"></property>
</bean>
</beans>