创建空白项目
导入spring core
org.springframework spring-core 5.3.13
- 普通的方式
建dao层,写出接口、和实现类:
//UserDao
public interface UserDao {
void getUser();
}
//UserDaoImpl
public class UserDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("默认获取用户信息");
}
}
新建service层,UserService接口和UserServiceImpl实现类
// UserService
public interface UserService {
void getUser();
}
//UserServiceImpl
public class UserServiceImpl implements UserService{
private UserDao userDao = new UserDaoImpl();
public void getUser() {
userDao.getUser();
}
}
然后测试类中获取运行
//用户实际调用业务层,不接触dao层
UserServiceImpl userService = new UserServiceImpl();
userService.getUser();
然而此时需求发生变化时,需要新建一个dao层实现类
同时需要修改Service层逻辑,一旦service层逻辑太过于复杂,修改设计的文件将会非常多
- IOC 方式
在serivce层,使用set方法,动态注入userDao
public class UserServiceImpl implements UserService{
private UserDao userDao;
//使用set方法实现动态注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void getUser() {
userDao.getUser();
}
}
//main
//用户实际调用业务层,不接触dao层
UserServiceImpl userService = new UserServiceImpl();
UserDaoMysqlImpl userDaoMysql = new UserDaoMysqlImpl();
userService.setUserDao(userDaoMysql);
userService.getUser();
- IOC控制反转
控制指的是对象创建、实例化、管理的能力
反转是指,之前普通的方式实现,开发者掌握了主动权,但是需求发生改变时,我们需要改变的地方会特别多。而IOC控制反转的方法,反转了主动权,把主动控制权交给了外部环境。
- IOC的作用:
解决依赖问题,有IOC容器的情况下,减少类与类之间依赖,比如上方service层类和dao层类之间的依赖,交由IOC控制容器去处理,IOC底层的思想简单来说就是set 动态注入
简单spring实现- spring 实例一
建一个普通类
public class Car {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "car{" +
"name='" + name + ''' +
'}';
}
}
在xml配置文件中,声明一个bean,bean即为spring IOC容器管理对象的方式,声明一个id,以及指明类的路径
bean中property属性中,
value为对象设立属性值
ref 为引用创建好的bean对象
使用bean 通过new ClassPathXmlApplicationContext,新建ApplicationContext对象,通过getBean 传入id,强转类型即可。
//获取spring的上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("beans1.xml");
//我们的对象都在spring中管理,需要使用直接获取即可
Car car = (Car) context.getBean("carTest");
System.out.println(car.toString());
ClassPathXmlApplicationContext 的继承关系:
User类中添加无参构造器
而在getBean的过程中,构造器已经开始执行,说明其实已构建对象



