例子一:
package com.itheima.a_ioc;
public interface UserService {
public abstract void yuehui();
}
package com.itheima.a_ioc;
public class UserServiceImpl implements UserService {
@Override
public void yuehui() {
System.out.println("ioc first ");
}
}
方式一:
@Test
public void demo01(){
//之前开发 接口=实现类
UserService userService = new UserServiceImpl();
userService.yuehui();
}
等价于
<bean id="userServiceId2" class="com.itheima.a_ioc.UserServiceImpl"></bean>
@Test
public void demo02(){
//从spring容器获得 不修改代码,直接配置文件中取出来userServiceId,
//spring 相当于创建了对象 UserService userService = new UserServiceImpl();
//1 获得容器
String xmlPath = "com/itheima/a_ioc/beans.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
//2获得内容 --不需要自己new,都是从spring容器获得
UserService userService = (UserService) applicationContext.getBean("userServiceId2");
userService.yuehui();
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
上面都是从UserService 和 UserServiceImpl 解决问题。
下面新写一个UserDao 和UserDaoImpl
一个新例子。
例二:
package com.itheima.a_ioc;
public interface UserDao {
public void ganhuo();
}
package com.itheima.a_ioc;
public class UserDaoImpl implements UserDao {
/* 下面的代码尤为关键,要理解。*/
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void ganhuo() {
this.userDao.ganhuo();
}
}
package com.itheima.a_ioc;
public class ZhansanUserDaoImpl implements UserDao {
public void ganhuo() {
System.out.println(" zhangsan ganhuo save dao");
}
}
package com.itheima.a_ioc;
public class LisiUserDaoImpl implements UserDao {
@Override
public void ganhuo() {
System.out.println(" Li si ganhuo save dao");
}
}
<bean id="userDaoId3" class="com.itheima.a_ioc.ZhansanUserDaoImpl"></bean>
<bean id="userDaoId4" class="com.itheima.a_ioc.UserDaoImpl">
<property name="userDao" ref="userDaoId"></property>
</bean>
<bean id="userDaoId" class="com.itheima.a_ioc.ZhansanUserDaoImpl"></bean>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------大总结:把Dao 注入到service里面。
然后test类里面userservice.yuehui(); 而不是 userdao.ganhuo(); 了
主要改写部分是:
package com.itheima.a_ioc;
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void yuehui() {
this.userDao.ganhuo();
}
}
bean 改写成为:
<bean id="userServiceId5" class="com.itheima.a_ioc.UserServiceImpl">
<property name="userDao" ref="userDaoId2"></property>
</bean>
<bean id="userDaoId2" class="com.itheima.a_ioc.ZhansanUserDaoImpl"></bean>
OK,搞定。