一、Spring简介
Spring 是 Java EE 编程领域的一款轻量级的开源框架,Spring 框架是一个分层的、面向切面的 Java 应用程序的一站式轻量级解决方案,它是 Spring 技术栈的核心和基础,是为了解决企业级应用开发的复杂性而创建的。
对于Spring的特点及体系结构大家可以去官方文档去了解,表达的很详细。
Spring 有两个核心部分: IoC 和 AOP。
二、控制反转
IoC的中文意思是控制反转,它不是一门技术,而是一种设计思想,设计出代码耦合性更低的程序。
在传统的 Java 应用中,一个类想要调用另一个类中的属性或方法,通常会先在其代码中通过 new Object() 的方式将后者的对象创建出来,然后才能实现属性或方法的调用。为了方便理解和描述,我们可以将前者称为“调用者”,将后者称为“被调用者”。也就是说,调用者掌握着被调用者对象创建的控制权。
举例:例如在Web开发中,有Dao层,DaoImpl实现类,Service业务层,ServiceImpl实现类。
//UserDao层
public interface UserDao {
/**
* 查询用户
*/
void getUser();
}
//UserDao的实现类Impl_1
public class UserDaoImpl_1 implements UserDao {
public void getUser() {
System.out.println("查询用户来了1111111111");
}
}
//UserDao的实现类Impl_2
public class UserDaoImpl_2 implements UserDao {
public void getUser() {
System.out.println("查询用户来了2222222222");
}
}
//Service业务层
public interface UserService {
void getUser();
}
//ServiceImpl实现类
public class UserServiceImpl implements UserService {
//创建UserDaoImpl_1对象,然后去调用
private UserDao userDao =new UserDaoImpl_1();
//重写业务层方法,调用方法。
public void getUser() {
userDao.getUser();
}
}
//创建测试类
public class MyTest {
public static void main(String[] args) {
UserService userService = new UserServiceImpl();
userService.getUser(); //控制台打印:查询用户来了1111111111
}
}
在上述代码中,如果想实现控制台打印"查询用户来了2222222222",需要在业务层的实现类修改代码,创建UserDaoImpl_2对象,这样代码的耦合性很高,如果Dao层有10个接口,那么用户想现实不同的查询,都需要我们程序员来修改代码,这样创建对象的权利都在我们程序员手中。
那么来,修改业务层实现类,通过设置Set属性注入,这里可以先这么理解看代码,后面会学习到实现IOC的方式,我们先来看看效果。
原来是程序员主动创建对象,现在变成了被动的接收对象。
//修改业务层实现类代码
public class UserServiceImpl implements UserService {
// private UserDao userDao =new UserDaoImpl_1();
private UserDao userDao;
/**
* 通过set动态依赖注入
* @param userDao
*/
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void getUser() {
userDao.getUser();
}
}
public class MyTest {
public static void main(String[] args) {
/**
* 控制反转简单来说就是获取依赖对象的方式改变了
* 业务层调用dao层,每次调用不同的dao实现类,在业务层里每次都需要创建新的dao实现类对象
* 主要dao与业务层耦合性高,每次需要修改代码,创建对象是由程序员控制
* 通过ioc思想,使用依赖注入,创建对象交给第三方
* 这里的MyTest测试类大家可以理解成用户 每次用户想用哪个调用哪个
*/
UserService userService = new UserServiceImpl();
//如果想调用UserDaoImpl_2,那么只需修改里面括号的对象
((UserServiceImpl) userService).setUserDao(new UserDaoImpl_1());
userService.getUser();
}
}
以上是本人第一天学习Spring入门记录,哪里理解的不对欢迎大家评论。