构造器注入
也就是构造方法注入(这个耦合度很高,意思就是形参名一旦变化,xml文件中的name也得变化)
```xml
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<!--
<property name="bookDao" ref="bookDao"/>
-->
<!--这个bookDao1是形参的名 跟之前setter注入不一样了-->
<constructor-arg name="bookDao1" ref="bookDao"/>
</bean>
```
```java
package com.itheima.service.impl;
import com.itheima.dao.BookDao;
import com.itheima.dao.UserDao;
import com.itheima.service.BookService;
public class BookServiceImpl implements BookService{
private BookDao bookDao;
//xml中用的name就是这里的bookDao1
public BookServiceImpl(BookDao bookDao1) {
this.bookDao = bookDao1;
}
@Override
public void save() {
System.out.println("book service save...");
bookDao.save();
}
}
```
service中常用 ref 与Dao层连接用,Dao层就用 value 来确定形参的值
```xml
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
<constructor-arg type="java.lang.String" value="mysql"/>
<constructor-arg type="int" value="100"/>
</bean>
这里用type(数据类型)取代了之前的name,不与形参名称耦合,更方便,不容易出错
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<!--
<property name="bookDao" ref="bookDao"/>
-->
<!--这个bookDao1是形参的名跟之前setter注入不一样了-->
<constructor-arg name="bookDao" ref="bookDao"/>
<constructor-arg name="userDao" ref="userDao"/>
</bean>
```
```xml
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
<constructor-arg index="1" value="mysql"/>
<constructor-arg index="0" value="100"/>
</bean>
这次更粗暴,直接输入参数位置(index) 解决了参数类型重复的问题
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<!--
<property name="bookDao" ref="bookDao"/>
-->
<!--这个bookDao1是形参的名跟之前setter注入不一样了-->
<constructor-arg name="bookDao" ref="bookDao"/>
<constructor-arg name="userDao" ref="userDao"/>
</bean>
```
总结:构造器注入就是 标签变了变成了<constructor-arg> 然后上面记得用构造方法就行了
Java学习
最新推荐文章于 2024-09-27 00:45:01 发布