④. 依赖注入的方式
- ①. 依赖注入(Dependency Injection):它是Spring框架核心 IOC 的具体实现(将对象的依赖自动注入到属性值(Dependency Injection))
- ②. 有参构造方法
public class UserServiceImpl implements UserService { private UserDao userDao; public UserServiceImpl(UserDao userDao1) { this.userDao = userDao1; } public void save() { userDao.save(); } }
<bean id="userDao" class="com.xiaozhi.dao.impl.UserDaoImpl"/> <bean id="userService" class="com.xiaozhi.service.impl.UserServiceImpl"> <---这个name对应有参构造中的userDao参数--> <constructor-arg name="userDao1" ref="userDao"></constructor-arg> </bean>
②. set方法
//1.在UserServiceImpl中添加setUserDao方法 public class UserServiceImpl implements UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void save() { userDao.save(); } } //2.配置Spring容器调用set方法进行注入 <bean id="userDao" class="com.xiaozhi.dao.impl.UserDaoImpl"/> <bean id="userService" class="com.xiaozhi.service.impl.UserServiceImpl"> <!--这个name要求是set后首字母改小写--> <property name="userDao" ref="userDao"/> </bean>
//当我们执行这些代码的时候,会加载配置文件,配置文件中会依次向下执行 //先创建UserDaoImpl的对象,后创建UserServiceImol对象 //最后调用UserServiceImpl中的set方法 ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao1 = (UserDao) app.getBean("userDao"); System.out.println(userDao1);
- ③. set方法:P命名空间注入 了解
- P命名空间注入本质也是set方法注入,但比起上述的set方法注入更加方便,主要体现在配置文件中,如下:
xmlns:p="http://www.springframework.org/schema/p"
其次,需要修改注入方式
<bean id="userService" class="com.xiaozhi.service.impl.UserServiceImpl" p:userDao- ref="userDao"/>