Spring的那些事
一.什么是IOC?
1.控制反转,把对象的创建和 对象之间的调用过程交给Spring进行管理。
2.使用IOC的目的:为了降低耦合度
二.IOC的底层原理
1.XML解析: DOM4J(API)进行解析
2.工厂模式:工厂类先进行XML解析。通过反射创建对象(获取字节码对象class通过class.forname()方法,在通过字节码对象的newInstence()方法创建字节码对象)
3.java反射:
三.IOC接口
1.IOC思想基于IOC容器完成,IOC容器底层就是对象工厂。
2.BeanFactory:IOC容器的基本实现,是Spring内部的使用接口,不提供开发人员使用。(加载配置文件时不会创建对象,在获取或使用时才去创建对象)
3.ApplicationContext:BeanFactory的子接口,功能更强大,供开发人员使用。(加载配置文件时就会把配置文件对象进行创建)
四.Bean管理(创建对象,注入属性)
1.注入属性:构造器注入,setter方法注入,根据注解注入。
2.Bean作用域:默认单例,可设置为多实例,Bean标签里有个scope属性设置为prototype。(singleton,prototype,request,session)
3.Bean生命周期:
1).通过构造器创建Bean实例(无参数构造)
2).为Bean的属性设置值和对其他Bean的引用(调用set方法)
3).调用Bean的初始化方法(需要配置Bean标签的init_method方法)
4).Bean可以使用了,执行自身业务逻辑方法。
5).当Bean容器关闭,调用Bean的销毁方法(需要进行配置Bean标签的destroy_method方法)
注:在初始化之前会执行前置处理器postProcessBeforeInitialization方法,之后会执行后置处理器postProcessAfterInitialazation方法
五.Bean的自动装配
1.Bean标签里有个autowire属性,可根据byName或者byType实现注入(@Autowired注解也可)
六、AOP(面向切面编程)
1.AOP可对业务逻辑的各个部分进行隔离,从而使得业务逻辑之间的耦合度降低,提高程序的可重用性,提高开发效率。
2.AOP可将一些通用的任务(安全管理,事务,日志,权限判断,异常处理等)进行集中处理,从而提供更好的复用性。
3.实现: 不通过修改源代码的方式在主干功能上添加新功能。
4.底层原理:(动态代理)
1),有接口的情况:使用JDK的动态代理,通过创建接口实现类的代理对象来增强类的实现方法,java.lang.reflect.Proxy类里面提供了newProxyInstance方法创建代 理对象。
2),没有接口:使用Cglib的动态代理,通过创建当前类的子类的代理对象来增强父类的功能方法。
5.AspectJ:Spring一般基于AspectJ实现AOP操作,是一个独立的AOP框架,不属于Spring,可基于XML配置或者注解来使用。
6.AspectJ :
1):通过配置文件或者配置类来开启注解扫描。
2):使用注解来创建增强类和被增强类的对象。
3):在增强类上添加@Aspect注解
4):在Spring配置文件中开启ASpectJ生成代理对象。
5): 在增强类的增强方法上配置不同类型的通知 ,比如:@After/@Before/@Around/@AfterThrowing/@AfterReturning(value="execution(*被增强类的路径.类名.方法名(..))")
6):@After(被增强类的方法执行未返回结果前执行)/@Before(比环绕通知早)/@Around(被增强类方法执行前后都执行)/@AfterThrowing(被增强类抛异常后执行)/@AfterReturning(被增强类的方法执行返回结果后执行) @Pointcut用于相同切入点抽取
7):有多个增强类对同一个类的方法进行增强时设置优先级,可通过在类上面添加@Order(数字类型值)注解来实现,数字类型值越小优先级越高

浙公网安备 33010602011771号