Spring依赖注入(DI)
-
-
public class UserServiceImpl{ private String username; }
通俗的说: 就是由于这个类的实例现在已经交给spring来创建了,我们要求,
spring在创建该类实例的时候,顺便把这个username 也赋值了。具体是什么值,由我们来指定。
-
set方法赋值
-
有参构造。
public class UserServiceImpl implements UserService { private String address; public UserServiceImpl(String address) { this.address =address; } @Override public void save() { System.out.println("调用了UserServiceImpl的save方法~~!" +address); } } xml: <bean id="us" class="com.itheima.service.impl.UserServiceImpl"> <!-- 指定走有参构造, name:构造方法的参数名称, value : 注入进去的值 --> <constructor-arg name="address" value="北京"/> </bean>
public class UserServiceImpl implements UserService { private String address; public void setAddress(String address) { this.address = address; } @Override public void save() { System.out.println("调用了UserServiceImpl的save方法~~!" +address); } } xml: <bean id="us" class="com.itheima.service.impl.UserServiceImpl"> <property name="address" value="深圳"></property> <!-- //背后会调用set方法进行注入 --> </bean>
private String [] address; public void setAddress(String [] address) { this.address = address; } xml: <property name="address"> <array> <value>北京1</value> <value>北京2</value> <value>北京3</value> <value>北京天安门,我爱北京</value> </array> </property>
private List address; public void setAddress(List address) { this.address = address; } xml: <property name="address"> <list> <value>北京11</value> <value>北京22</value> <value>北京33</value> <value>北京天安门,我爱北京44</value> </list> </property>
private Map<String , Object> address; public void setAddress(Map<String , Object> address) { this.address = address; } xml: <!-- map集合 --> <property name="address"> <map> <entry key="地址1" value="北京1"/> <entry key="地址2" value="北京2"/> <entry key="地址3" value="北京3"/> <entry key="地址4" value="北京4"/> </map> </property>
public class UserServiceImpl implements UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } } public class UserDaoImpl implements UserDao { @Override public void save() { System.out.println("调用了UserDaoImpl的save方法~~"); } } xml: <!-- 让spring创建UserDaoImpl的实例 --> <bean id="ud" class="com.itheima.dao.impl.UserDaoImpl"></bean> <!-- 让spring创建UserServiceImpl的实例 --> <bean id="us" class="com.itheima.service.impl.UserServiceImpl"> <!-- 让spring调用UserServiceImpl里面的setUserDao 方法,并且要带参数 参数就是ud 对应的那个bean的实例对象 --> <property name="userDao" ref="ud"/> </bean>
运行顺序应该是这样:
1. 我们拿着us 找到spring工厂(IOC工厂 | IOC容器),spring工厂会创建UserServiceImpl的实例
2. 创建完实例,接着会调用这个类中的setUserDao方法。
3. 但是调用这个方法需要参数。参数怎么给呢? 看ref="ud" ,
4. 拿着ud 满世界的找bean , 询问是否有哪一个bean 的标识符也是 ud
5. 如果找到了就创建这个bean的实例对象。
6. 拿着这个实例对象当成上面 第二步 setUserDao的参数给注入进去。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步