依赖注入-构造器注入
依赖注入-构造器注入
引用类型
-
在bean中定义引用类型属性并提供构造器
public class BookServiceImpl implements BookService{ private BookDao bookDao; private UserDao userDao; public BookServiceImpl(BookDao bookDao, UserDao userDao) { this.bookDao = bookDao; this.userDao = userDao; } @Override public void save() { System.out.println("book service save..."); bookDao.save(); } }
-
配置中使用constructor-arg标签ref属性注入引用类型对象
<bean id="bookService" class="com.charley.service.impl.BookServiceImpl"> <!--name是构造器形参的名称--> <constructor-arg name="bookDao" ref="bookDao"/> <constructor-arg name="userDao" ref="userDao"/> </bean>
简单类型
-
在bean中定义简单类型属性并提供构造器
public class BookDaoImpl implements BookDao { private String databaseName; private int connectionNum; public BookDaoImpl(String databaseName, int connectionNum) { this.databaseName = databaseName; this.connectionNum = connectionNum; } @Override public void save() { System.out.println("book dao save..." + databaseName + "," + connectionNum); } }
-
配置中使用constructor-arg标签value属性注入简单类型数据
<bean id="bookDao" class="com.charley.dao.impl.BookDaoImpl"> <constructor-arg name="connectionNum" value="10"/> <constructor-arg name="databaseName" value="mysql"/> </bean> <!--指定类型,而不是指定形参参数名,解决形参参数名和代码的耦合性问题--> <bean id="bookDao" class="com.charley.dao.impl.BookDaoImpl"> <constructor-arg type="int" value="10"/> <constructor-arg type="java.lang.String" value="mysql"/> </bean> <!--通过指定参数的索引,解决参数类型的重复问题--> <bean id="bookDao" class="com.charley.dao.impl.BookDaoImpl"> <constructor-arg index="1" value="10"/> <constructor-arg index="0" value="mysql"/> </bean>