优点:
- Spring是一个开源的免费的框架(容器)!
- Spring是一个轻量级的,非入侵式的框架!
- 控制反转(IOC),面向切面编程(AOP)!
- 支持事务的处理,对框架整合的支持!
总结一句话:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架!
SpringBoot
- 一个快速开发的脚手架
- 基于SpringBoot可以快速的开发带个微服务
- 约定大于配置
SpringCloud
- SpringCloud是基于SpringBoot实现的。
因为现在大多数公司都在使用SpringBoot进行快速开发,学习SpringBoot的前提,需要完全掌握Spring及SpringMVC! 承上启下的作用!
弊端:发展太久之后,违背了原来的理念!配置十分繁琐!人称:“配置地狱!”
2、IOC理论推导
将对象的创建交给spring管理,程序员不在关注对象的创建
在我们之前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改原代码!如果程序代码量十分大,修改一次的成本代价十分昂贵!
1.UserDao接口
public interface userDao{
private void getUser();
}
2.Dao的实现类
public class UserDaoImpl implements UserDao{
@Oveeribe
public void getUser(){
System.out.println("获取用户数据");
}
}
public class UserMysqlImpl implements UserDao{
@Oveeribe
public void getUser(){
System.out.println("获取mysql数据");
}
}
3.userService接口
public interface userService{
private void getUser();
}
4.Service的实现类
public class UserServiceImpl implements UserService{
private UserDao userDao = new UserDaoImpl();
@Oveeribe
public void getUser(){
userDao.getUser();
}
}
5.测试
dao层实现类每改变一次,service业务层就需要改动一次。
UserService userService = new UserServiceImpl();
userService.getUser();
修改Service层
private UserDao userDao;
//利用set进行动态实现值得注入!
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
测试:
@Test
public void test(){
UserService userService = new UserviceImpl();
((UserServiceImpl) userService).setUserDao(new UserMysqlImpl);
userService.getUser();
}
我们使用一个Set接口实现,已经发生了革命性的变化!
- 之前,程序是主动创建对象!控制权在程序员手上!
- 使用了set注入之后,程序不在具有主动性,而是变成了被动的接收对象!
这种思想,从本质上解决了问题,我们程序员不用再去管理对象的创建了。系统的耦合性大大降低~,可以更加专注的在业务的实现上!这是IOC的原型!
IOC的本质
注解实现Bean自动装配
@Autowired注解
@Resource注解
使用注解开发
使用Java的方式配置Spring
配置文件
测试类
这种纯Java的配置方式,在springBoot项目中随处可见!
代理模式
代理模式的分类:
- 静态代理
- 动态代理
静态代理
角色分析:
- 抽象角色:一般会使用接口或者抽象类来解决
- 真是角色:被代理的角色
- 代理角色:代理真是角色,代理真是角色后,我们一般会做一些附属操作
- 客户:访问代理人
动态代理
- 动态代理和静态代理角色一样
- 动态代理的代理类是动态生成的,不是我们直接写好的!
- 动态代理分为两大类:基于接口的动态代理,基于类的动态代理
- 基于接口---JDK动态代理
- 基于类:cglib
- Java字节码实现:Javasist
需要了解两个类:Proxy(代理),invocationHandler(调用处理程序)
AOP
什么是AOP?
方式三:注解实现