package com.ljz.dao;
public interface UserDao {
void getUser();
}
dao层获取用户实现类
package com.ljz.dao.impl;
import com.ljz.dao.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public void getUser() {
System.out.println("默认获取用户");
}
}
service层获取用户信息接口接口类
package com.ljz.service;
public interface UserService {
void getUser();
}
service层获取用户接口实现类
package com.ljz.service.impl;
import com.ljz.dao.UserDao;
import com.ljz.dao.impl.UserDaoImpl;
import com.ljz.service.UserService;
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override
public void getUser() {
userDao.getUser();
}
}
测试
package com.ljz.service.impl;
import com.ljz.service.UserService;
import org.junit.Test;
public class UserServiceImplTest {
@Test
public void getUser(){
UserService userService = new UserServiceImpl();
userService.getUser();
}
}
输出:
Spring容器思想:
将所有类的实例化都放到一个HashMap容器中,在其他类调用其他类时不用再重新new开辟实例空间。
IOC的思想就是把new实例化的操作交给Spring容器去做,去管理
在原代码基础上增加一个容器类
package com.ljz.container;
import java.util.HashMap;
import java.util.Map;
public class CoreContainer {
public static final HashMap MAP = new HashMap<>();
}
修改service层获取用户接口实现类逻辑
package com.ljz.service.impl;
import com.ljz.container.CoreContainer;
import com.ljz.dao.UserDao;
import com.ljz.dao.impl.UserDaoImpl;
import com.ljz.service.UserService;
public class UserServiceImpl implements UserService {
private final UserDao userDao = (UserDao) CoreContainer.MAP.get("userDao");
@Override
public void getUser() {
userDao.getUser();
}
}
测试
package com.ljz.service.impl;
import com.ljz.container.CoreContainer;
import com.ljz.dao.impl.UserDaoImpl;
import com.ljz.service.UserService;
import org.junit.Test;
public class UserServiceImplTest {
// @Test
// public void getUser(){
// UserService userService = new UserServiceImpl();
// userService.getUser();
// }
@Test
public void getUser1(){
CoreContainer.MAP.put("userDao",new UserDaoImpl());
CoreContainer.MAP.put("userService",new UserServiceImpl());
UserService userService = (UserService) CoreContainer.MAP.get("userService");
userService.getUser();
}
}
输出:
3.配置元数据
Spring loC容器使用一种配置元数据形式。这个配置元数据表示作为应用程序开发人员,告诉Spring容器如何去实例化、配置和组装应用程 序中的对象(类似于将配方交给Spring容器,他帮我们去实例化对象)。配置元数据传统上以简单而直观的XML格式提供。
创建配置文件:ioc.xml
测试类
加载配置元数据 ApplicationContext context = new ClassPathXmlApplicationContext(“ioc.xml”);
package com.ljz.service.impl;
import com.ljz.container.CoreContainer;
import com.ljz.dao.impl.UserDaoImpl;
import com.ljz.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserServiceImplTest {
@Test
public void testIoc(){
ApplicationContext context = new ClassPathXmlApplicationContext("ioc.xml");
UserDaoImpl bean = context.getBean(UserDaoImpl.class);
bean.getUser();
}
}