bean标签的属性 1、基础属性 id:在容器中唯一 class:类全路径2、scope:对象作用范围singleton:单例默认prototype:多例request:session:globalSession:3、bean的初始方法和销毁方法标签属性init-method:初始化方法在创建对象时执行destroy-method:销毁方法在对象销毁时执行接口:publicvoidinit();publicvoiddestroy();实现类:publicvoidinit(){System.out.println("init......");}publicvoiddestroy(){Syst
Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean。工厂Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该工厂Bean的getObject方法所返回的对象。Spring初始化bean有两种方式:实现InitializingBean接口,实现afterPropertiesSet方法。(比通过反射调用init-method指定的方法效率要高一点)配置文件中通过init-method指定,两种方式可以同时使用。(init-method方式消除了对spring的依赖)InitializingBean使用场景:通过外部对类是否是
Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean。工厂Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该工厂Bean的getObject方法所返回的对象。Spring初始化bean有两种方式:实现InitializingBean接口,实现afterPropertiesSet方法。(比通过反射调用init-method指定的方法效率要高一点)配置文件中通过init-method指定,两种方式可以同时使用。(init-method方式消除了对spring的依赖)InitializingBean使用场景:通过外部对类是否是
问题现象最近在本地调试公司的一个Web项目时,无意中发现日志中出现了两次同一个服务的init记录,项目都是基于Spring来搭建的,按理说服务都是单例的,应该只有一次服务加载日志才对,本着对工作认真负责(闲来无事)的态度,必然要一探究竟。问题分析为什么同一个Bean会被容器初始化两次?首先,我们先来梳理一下Web容器中如何加载Bean:在Web容器中,ContextLoaderListener和DispatchServlet都会在容器启动的时候加载Bean,区别在于DispatchServlet一般会加载MVC相关的Bean,ContextLoaderListener会加载Spring相关的B
问题现象最近在本地调试公司的一个Web项目时,无意中发现日志中出现了两次同一个服务的init记录,项目都是基于Spring来搭建的,按理说服务都是单例的,应该只有一次服务加载日志才对,本着对工作认真负责(闲来无事)的态度,必然要一探究竟。问题分析为什么同一个Bean会被容器初始化两次?首先,我们先来梳理一下Web容器中如何加载Bean:在Web容器中,ContextLoaderListener和DispatchServlet都会在容器启动的时候加载Bean,区别在于DispatchServlet一般会加载MVC相关的Bean,ContextLoaderListener会加载Spring相关的B
背景介绍:最近在搭建一个公共项目,类似业务操作记录上报的功能,就想着给业务方提供统一的sdk,在sdk中实现客户端和服务端的交互封装,对业务方几乎是无感的。访问关系如下图:访问关系示意图这里采用了http的方式进行交互,但是,如果每次接口调用都需要感知http的封装,一来代码重复度较高,二来新增或修改接口也需要同步更改客户端代码,就有点不太友好,维护成本较高;能否实现像调用本地方法一样调用远程服务(RPC)呢,当然是可以的,并且也有好多可以参考的例子。例如,feignclient的实现思路,定义好服务端的接口,通过Java代理的方式创建代理类,在代理类中统一封装了http的调用,并且将代理类作
背景介绍:最近在搭建一个公共项目,类似业务操作记录上报的功能,就想着给业务方提供统一的sdk,在sdk中实现客户端和服务端的交互封装,对业务方几乎是无感的。访问关系如下图:访问关系示意图这里采用了http的方式进行交互,但是,如果每次接口调用都需要感知http的封装,一来代码重复度较高,二来新增或修改接口也需要同步更改客户端代码,就有点不太友好,维护成本较高;能否实现像调用本地方法一样调用远程服务(RPC)呢,当然是可以的,并且也有好多可以参考的例子。例如,feignclient的实现思路,定义好服务端的接口,通过Java代理的方式创建代理类,在代理类中统一封装了http的调用,并且将代理类作
1.Bean的作用域(1)Bean的作用域即Bean实例的作用范围,Spring支持6种bean的作用域,其中4种只能在web环境中使用,具体如下作用域描述singleton默认作用域,采用单例模式,Spring只会创建一个该bean实例,每次请求时Spring返回的都是同一个bean实例prototype采用原型模式,Spring会创建多个该bean实例,每次请求时Spring返回的都是一个新的bean实例request仅用于web环境,Spring会为每次Http请求创建一个新的bean实例session仅用于web环境,Spring会为每个Session创建一个新的bean实例appli
1.Bean的作用域(1)Bean的作用域即Bean实例的作用范围,Spring支持6种bean的作用域,其中4种只能在web环境中使用,具体如下作用域描述singleton默认作用域,采用单例模式,Spring只会创建一个该bean实例,每次请求时Spring返回的都是同一个bean实例prototype采用原型模式,Spring会创建多个该bean实例,每次请求时Spring返回的都是一个新的bean实例request仅用于web环境,Spring会为每次Http请求创建一个新的bean实例session仅用于web环境,Spring会为每个Session创建一个新的bean实例appli
1.生命周期回调(1)如果我们想要介入bean的生命周期,可通过实现spring中的InitializingBean和DisposableBean接口来达到这一目的,spring会调用InitializingBean中的afterPropertiesSet()以及DisposableBean中的destroy()方法来执行bean在初始化和销毁时所要执行的行为,此外JSR-250规范中的@PostConstruct和@PreDestroy注解也同样对springbean适用,它们也可以指定bean的初始化或销毁方法,且不与spring框架强耦合,同时如果不想使用JSR-250注解,也可通过配置