Spring IOC
什么是IOC?
控制反转解释: 控制:指的是对象创建(实例化、管理)的权利 反转:控制权交给外部环境了(spring框架、IoC容器)
与传统开发方式相比在IOC的思想开发方式下,当类A需要以来类B时,我们不要自己去new对象了,而是由IOC容器帮我们实例化对象并且去管理它,我们需要什么对象直接从IOC容器中获取即可,由此我们可以省去创建和管理对象的一系列事情,也丧失了创建、管理对象的权力。
IOC解决了什么问题
IoC解决对象之间的耦合问题,例如当service层调用dao层时,传统方式下我们需要在service中new出dao层的具体实现类,这时当我们实现类需要改变时,service层也需要做相应的改变,这就造成了service层和dao层的强耦合。
IOC和DI的区别
IOC和DI(依赖注入)其实描述的都是对象实例化和依赖关系维护这同一件事情,只是角度不同。IOC是站在对象的角度,对象的实例化和管理交给了容器(反转);DI是站在容器的角度,容器会把对象所依赖的对象注入,例如A对象在实例化的过程中声明了B对象,那么容器就会把B对象注入给A。
依赖注入的相关注解?
@Autowired :自动按类型注入,如果有多个匹配则按照指定的Bean的id查找,查找不到会报错。 @Qualifier :在自动按照类型注入的基础上再按照Bean的id注入,给变量注入时必须搭配@Autowired,给方法注入时可单独使用。 @Resource:直接按照Bean的id注入,只能注入Bean类型。 @Value:用于注入基本数据类型和String类型
Spring AOP
AOP: Aspect oriented Programming ?向切?编程/?向??编程,AOP是OOP的延续。 OOP的三大特征: 封装、继承和多态 opp思想是一种垂直纵向的继承体系,解决了代码开发中的大多数代码重复问题,例如当我们由三个类(pig、dog和cat),其中每个类中都有相同的方法(eat(); run();),那么未来避免代码重复,oop思想下我们就可以提取父类(animal),在父类中设置通用的属性(weight、height、eat(); run(); … …),让原有的类继承该类,这样子类中就可以不再重复写这些方法了,同样子类下的子类依然可以通过继承父类来避免代码的重复。示例图如下:
但是当顶级父类(animal)中的多个方法中的相同位置出现重复代码时,如下图,OOP的思想就无法解决了。此时我们就需要用到AOP的思想了。
?首先解释此类重发代码被称为“横切逻辑代码”,即在多个纵向(顺序)流程中出现的多个相同子流程代码。 此类代码的使用场景通常有:事务控制、权限校验和打印日志中。
横切逻辑代码存在什么问题:
1、横切代码重复问题;
2、横切逻辑代码和业务代码混杂在?起,代码臃肿,维护不?便。
AOP提出了横向抽取机制,将横切逻辑代码和业务逻辑代码分离,在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。
AOP的相关注解有哪些?
@Aspect:声明被注解的类是一个切面的Bean; @Before:前置通知,指在某个连接点之前执行的通知; @After:后置通知,指某个连接点退出时执行的通知(不论程序是正常返回还是异常退出) @AfterReturning:返回后通知,指某连接点正常完成之后执行的通知,返回值使用returning属性接收。 @AfterThrowing:异常通知,指方法抛出异常导致退出时执行的通知,和@AfterReturning只会有一个执行,异常使用throwing属性接收。
|