SpringFramework基础内容
Spring全家桶与Framework关系Spring全家桶组成Spring Framework最基础部分包含IoC、AOP、事务等核心功能。Spring Boot基于Framework封装简化配置启动流程。Spring Cloud微服务架构支持。Spring Data数据库访问抽象层。本次课程聚焦点主要讲解Spring Framework即整个生态体系中最基础的部分。Bean的创建与生命周期Bean的本质Bean是Spring容器管理的对象通常由Spring负责创建并赋予额外能力如依赖注入、AOP代理等。Bean创建流程概览使用类的构造方法创建对象。对象创建后进行属性赋值依赖注入。执行初始化前处理如PostConstruct注解方法。执行初始化方法如InitializingBean接口或自定义init方法。AOP代理生成如有切面匹配该类。初始化后处理如有需要。最终放入Spring容器中供使用。Bean与普通Java对象区别Bean由Spring创建并管理具有自动注入、生命周期回调、代理增强等功能。普通对象不具备这些特性。构造方法的选择与推断构造方法选择规则若只有一个构造方法无论是否有参数均使用该构造方法。若有多个构造方法且无Autowired注解Spring无法确定使用哪一个会报错。若有多个构造方法并标注了Autowired注解则使用该注解标注的构造方法。构造方法推断过程Spring根据类结构推断应使用的构造方法。若存在多个有参构造方法且未指定AutowiredSpring会尝试查找默认无参构造方法。若找不到无参构造方法抛出异常提示“找不到默认构造方法”。依赖注入原理与实现依赖注入实现步骤获取当前对象的所有字段。遍历字段判断是否加了Autowired注解。根据字段类型从Spring容器中查找匹配Bean。若找到唯一匹配Bean直接赋值。若找到多个匹配Bean再根据字段名Bean名称进一步筛选。若仍无法确定抛出异常。示例说明UserService依赖OrderServicejavaAutowired private OrderService orderService;Spring通过反射获取字段信息查找OrderService类型的Bean并赋值。初始化前与初始化方法执行PostConstruct注解方法执行Spring遍历所有方法判断是否标注了PostConstruct。若标注则执行该方法。InitializingBean接口实现实现afterPropertiesSet()方法在属性赋值完成后执行初始化逻辑。两者的异同PostConstruct为注解驱动适用于任意方法。InitializingBean为接口回调需实现固定方法名。两者都属于初始化阶段顺序上PostConstruct先于afterPropertiesSet()执行。AOP代理对象的生成与行为AOP代理生成时机在Bean初始化完成之后生成代理对象。基于JDK动态代理或CGLIB生成子类代理。代理对象与原始对象关系代理对象持有原始对象target实际业务逻辑由target执行。代理对象用于添加切面逻辑如前置通知、环绕通知等。AOP方法调用流程调用代理对象的方法。执行切面逻辑如Before。调用目标对象的实际方法super.method()。返回结果或处理异常如AfterThrowing。代理对象属性为何为空代理对象本身并未经历完整的依赖注入流程。实际执行时通过target对象访问属性因此属性是有值的。Spring事务管理机制事务代理对象生成通过事务管理器创建数据库连接。修改连接的autoCommit属性为false开启事务控制。事务执行流程开启事务设置autoCommitfalse。执行业务SQL操作。若无异常提交事务若有异常回滚事务。事务传播机制示例示例方法A被标记为Transactional(propagation Propagation.NEVER)。当外部已有事务时抛出异常表示不允许嵌套事务。事务失效常见场景方法被普通对象调用而非代理对象。数据源不一致导致不同事务上下文。未正确使用Transactional注解或未启用EnableTransactionManagement。解决方案使用代理对象调用事务方法。确保数据源一致如通过Bean返回单例DataSource。正确配置EnableTransactionManagement和Transactional。Configuration注解的作用与原理Configuration的作用表明该类为配置类其内部Bean方法会被Spring代理以确保返回单例。未加Configuration的问题多次调用Bean方法会生成多个实例导致数据源不一致。事务管理器与JDBC Template持有的不是同一个DataSource事务失效。加Configuration后的变化Spring生成配置类的代理对象。第一次调用Bean方法时创建Bean并缓存。后续调用直接返回已缓存的Bean保证单例性。实现原理简述代理逻辑拦截Bean方法调用。判断Spring容器中是否存在该Bean存在则直接返回不存在则创建并缓存。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2422920.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!