
spring
文章平均质量分 79
CaptainCats
悟已往之不谏、知来者之可追。
展开
-
spring ioc解决循环依赖为什么需要用三级缓存
是因为aop,而aop的核心是动态代理,简单理解就是我们需要横切逻辑增强的对象,实际上是生成一个代理对象操作被增强对象,而不是被代理对象本身。有需要的可以看下:spring框架源码一、什么是aop所以A依赖B,如果B被aop代理,那么实际依赖的不是B对象,而是B的代理对象,在spring ioc的循环依赖问题我们说过循环依赖的处理机制:A和B互相依赖,假如先去创建A,A实例化后先把自己放入三级缓存,目的是为了提前暴露,然后发现依赖B,接着创建B,B依赖A,B会去三级缓存中找A,使用并将A放入原创 2022-12-07 21:37:13 · 1022 阅读 · 0 评论 -
spring ioc的循环依赖问题
spring ioc的循环依赖通常是指bean与bean之间的相互依赖,例如A持有对B的引用、B持有对A的引用,形成一个闭环,相对于这种我们一眼可以看出来的相互引用,实际引用中可能比这复杂、也隐蔽的多,要隐蔽、复杂的多,形成一个环形依赖。其中,构造函数注入的循环依赖无法解决,只能抛出BeanCurrentlyCreationException异常,在解决循环依赖时,spring采用的是提前暴露对象的方法。spring的循环依赖基于Java的引用传递,当获得对象的引用时,对象属性可以延后设置,而原创 2022-12-04 13:49:26 · 1750 阅读 · 0 评论 -
spring框架源码十七、Bean对象创建子流程
Bean对象创建子流程的入口,标记bean开始被创建,this.alreadyCreated.add(beanName)/**// 从缓存中获取bean // Eagerly check singleton cache for manually registered singletons. Object sharedInstance = getSingleton(beanName);原创 2022-11-19 11:37:22 · 852 阅读 · 0 评论 -
spring框架源码十六、BeanDefinition加载注册子流程
开始加载应用中的BeanDefinitions创建xmlBeanDefinition读取器并设置上下文环境、加载BeanDefinitions/**原创 2022-11-17 21:48:27 · 809 阅读 · 0 评论 -
spring框架源码十四、源码剖析注意事项及容器初始化主体流程
ioc容器是spring的核心模块,是抽象了bean管理、依赖关系维护的解决方案。spring提供了很多容器,BeanFactory是顶层容器,它定义了容器遵循的原则,ApplicationContext是BeanFactory的一个子接口,具体的实现容器有,ClassPathXmlApplicationContext:包含了xml解析的一系列内容,AnnotationConfigApplicationContext:包含了注解解析的一系列内容,等。原创 2022-11-03 22:01:57 · 519 阅读 · 0 评论 -
spring框架源码十三、spring ioc高级特性-后置处理器
spring提供了两种后置处理bean的扩展接口,分别为BeanPostProcessor和BeanFactoryPostProcessor,BeanPostProcessor提供了两个方法,分别在初始化方法之前和之后执行,这里的初始化方法就是bean的init-method。如果我们定义了一个BeanPostProcessor的实现类,默认会对spring ioc容器中的所有bean进行处理,如果要对某个具体的bean进行处理,可以通过方法的参数(Object bean, String bean原创 2022-10-26 21:25:13 · 552 阅读 · 0 评论 -
spring框架源码十二、spring ioc高级特性之lazy-init延迟加载及FactoryBean和BeanFactory
BeanFactory是容器的顶级接口,定义了容器的一些基础行为,负责生产和管理bean的一个工厂,spring的bean有两种,一种是普通bean,另一种是工厂bean(FactoryBean),所以bean2也被实例化,这也符合延迟加载的bean在第一次被调用时才实例化的规则,如果一个设置提前加载的bean1,依赖了一个延迟加载的bean2,这里的userEntity是UserEntityFactoryBean的getObject返回的对象,而不是UserEntityFactoryBean本身,原创 2022-10-24 19:13:30 · 928 阅读 · 1 评论 -
spring框架源码十一、源码环境构建
jdk:1.8,spring源码:5.1.x。原创 2022-10-23 23:09:22 · 722 阅读 · 0 评论 -
spring框架源码十、spring ioc注解模式
在xml+注解组合模式的基础上,将xml中配置的bean,全部替换为注解的形式,最终删除xml,从Java配置类启动,xml+注解组合的模式还是从ClassPathXmlApplicationContext启动。原创 2022-10-22 22:01:24 · 662 阅读 · 0 评论 -
spring框架源码九、spring ioc xml与注解组合模式
xml标签对应的注解:bean标签@Component(“testService”),作用于类上,bean的ID为value的值,如果不配置,默认取类名称首字母小写作为bean的ID,另外,针对不同分层提供了@Component的三种别名@Controller、@Service、@Repository,分别用于控制层、服务层、持久层的bean定义,这四个注解的用法完全一样,只是为了区分更清晰。bean标签的scope属性@Scope(“singleton”),作用于类上,默认单例。原创 2022-10-21 23:15:54 · 410 阅读 · 0 评论 -
spring框架源码八、spring ioc xml模式的依赖注入配置
spring依赖注入有两种方式。setter注入使用property标签,注入普通值使用value属性,注入其它的bean使用ref属性。构造器注入使用constructor-arg注入,注入普通值使用value属性,注入其它的bean使用ref属性。原创 2022-10-20 23:17:45 · 198 阅读 · 0 评论 -
spring框架源码七、spring ioc xml模式bean的实例化方式及标签属性
另外两种方式是为了将我们new的对象放入到spring ioc容器。原型模式bean,spring框架只负责创建,不负责销毁。对象死亡:当对象长时间不被使用,会被javaGC回收;需要先实例化CreateBeanFactory。我们只需要关注上边两种,另外几种很少会用到。对象出生:当使用bean时,创建新的对象;对象出生:当创建容器时,对象就被创建了;对象死亡:当容器被销毁,对象就被销毁了;对象活着:只要容器还存在,会一直活着;单例模式bean的生命周期与容器相同。对象活着:只要对象被使用,会一直活着;原创 2022-10-19 22:07:07 · 442 阅读 · 0 评论 -
spring框架源码六、spring ioc xml模式
在我们自定义的ioc中,主要包含两部分,1、bean信息的定义bean的类全限定名以及bean之间的依赖关系。实例化bean对象并维护bean之间的依赖关系。spring框架的ioc实现中,bean定义信息支持以下几种,1、xml模式;ioc容器启动方式:或通过ContextLoaderListener监听器加载xml。2、xml+注解模式;3、注解模式。启动方式:或通过ContextLoaderListener监听器去加载配置类。原创 2022-10-18 22:23:27 · 326 阅读 · 0 评论 -
spring框架源码五、自定义ioc
在实例化service对象时,new关键字将TestController和TestServiceImpl耦合在了一起,而实际上按照面向接口开发原则,controller并不需要关心TestService的具体实现。如果不使用new的话,我们还有其它方式实例化service对象吗?可以通过反射的方式实例化对象,例如,Class.forName(“com.duohoob.spring.service.TestServiceImpl”)原创 2022-10-17 22:45:55 · 357 阅读 · 0 评论 -
spring框架源码四、什么是ioc
ioc(Inversion of Control)控制反转如果在class B中包含有一个属性,它的类型为class A那我们认为B依赖A。}}一般情况下,我们在B中需要用到A时,需要通过new关键字去创建一个A对象,是主动创建依赖;spring中是由ioc容器通过DI(Dependency Injection)依赖注入为B注入依赖A;对依赖的控制发生了反转,由主动创建变为了被动注入。spring通过IoC容器创建bean并维护bean之间的关系,这是spring的核心,贯穿始终。原创 2022-10-16 18:39:50 · 186 阅读 · 0 评论 -
spring框架源码三、自定义aop实现事务控制
用工厂类生成BankAccountService的动态代理,BankAccountController调用BankAccountService的动态代理对象,在代理对象中增强横切逻辑。原创 2022-10-06 23:23:25 · 853 阅读 · 0 评论 -
spring框架源码二、自定义事务控制
Connection.commit,提交事务、Connection.rollback,回滚事务,Connection默认自动提交。我们给当前线程当前线程绑定一个数据库连接Connection,线程内数据库操作都使用这同一个Connection。如果要用同一个事务控制两个update,那么就必须使用同一个数据库连接Connection,我们再看数据库,发现张三的钱少了100,但是李四的钱并没有增加100,实现事务控制,归根结底要通过操作Connection来实现,我们接下来就是要解决这个问题。原创 2022-10-05 20:45:37 · 696 阅读 · 0 评论 -
spring框架源码一、什么是aop
aop(Aspect Oriented Programming)面向切面编程要想了解aop有必要先了解一下oop,oop(Object Oriented Programming)面向对象编程关于oop不需介绍太多,只用提一下,oop的三大特征:封装、多态、继承。oop更多是维护一种纵向的垂直继承体系。比如:A、X的子类都可以通过继承而获得eat和drink的能力,这一相同的行为。aop是oop的补充它们的本质都是为了减少重复代码。原创 2022-10-03 23:52:10 · 431 阅读 · 0 评论