当前位置: 首页 > news >正文

绵阳网站建设推广免费广告投放平台

绵阳网站建设推广,免费广告投放平台,网站建设合同包含,网站建设电话销售开场白Configuration注解介绍 Configuration注解,用于标注一个类是一个spring的配置类(同时,也是一个bean),配置类中可以使用ComponentScan、Import、ImportResource 和 Bean等注解的方式定义beanDefinition。 Target(Elem…

@Configuration注解介绍

@Configuration注解,用于标注一个类是一个spring的配置类(同时,也是一个bean),配置类中可以使用@ComponentScan、@Import、@ImportResource 和 @Bean等注解的方式定义beanDefinition。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component // 被@Component注解修饰, 相当于也加上了@Component注解
public @interface Configuration {// 同@Component注解的value,即配置类的beanName@AliasFor(annotation = Component.class)String value() default "";// 是否代理配置类中@Bean修饰的方法boolean proxyBeanMethods() default true;
}

full模式和lite模式

如何确定配置类是full模式或lite模式?

  • 当一个配置类,它使用了@Configuration注解修饰时,并且@Configuration注解的proxyBeanMethods属性为true时,那么会给该配置类的bean定义信息添加值为full的属性(CONFIGURATION_CLASS_ATTRIBUTE)。

  • 当一个配置类,它使用了@Configuration注解修饰时,但是@Configuration注解的proxyBeanMethods属性为false时,那么会给该配置类的bean定义信息添加值为lite的属性(CONFIGURATION_CLASS_ATTRIBUTE)。

  • 当一个配置类,它没有使用@Configuration注解修饰时,但是它在类上使用了@Component或@ComponentScan或@Import或@ImportResource等注解或在类中的某个方法上使用了@Bean注解,那么也会给该配置类的bean定义信息添加值为lite的属性(CONFIGURATION_CLASS_ATTRIBUTE)。

full模式增强

lite模式就相当于是一个“简单版”的配置类,这个配置类中的方法使用@Bean注解怎么定义的bean,就怎么创建,比如使用factoryBean-factoryMethod工厂方法创建。

但是,full模式与此不同,如果一个配置类是full模式(@Configuration默认就是full模式),那么spring在processBeanDefinisitionRegistry配置类的时候,该创建bean定义的时候创建bean定义,这个过程与lite模式一致。但是,在后面postProcessBeanFactory时(因为前面的过程已经收集好了bean定义),如果发现,某个bean定义的CONFIGURATION_CLASS_ATTRIBUTE属性为“full”,那么就会生成这个配置类的代理类,代替我们自己原本定义的配置类,代理类中会使用cglib重写原来的成员方法(具体怎么重写的?按照cglib生成代码的规则),使得原本对我们自己的定义的配置类中的方法调用,变成了调用代理类的方法,而代理类的方法(cglib重写了原方法),又会把调用转而调用到BeanMethodInterceptor#intercept方法,从而完成对原配置类中的@Bean方法的拦截。

full模式增强实例

可能这样说有点抽象,下面看个实例。

@Configuration(proxyBeanMethods = true) // 默认就是true
public class Bm {@Bean // 定义了b1public B1 b1() {B1 b1 = new B1();return b1;}@Bean // 定义b2public B2 b2() {B2 b2 = new B2();  // 因为b2中需要一个b1,所以,我这里直接调用了b1,然后把方法的返回结果,给了b2// 那么问题就来了://     1. 首先,这里其实省略了this,那么this是谁?//             这是很关键的,很明显,谁调用了b2这个方法,谁就是这里的this//	   2. 如果是当前的这个Bm这个对象,调用了b2这个方法,那么this就是b2这个对象//             但是,我们刚刚提到了,如果,spring为我们创建了一个代理类,这个代理类继承自Bm,//             那么这个代理类对象也是可以调用b2这个方法的嘛?通过super关键字就行了//             我们假设就是代理类对象通过super调用的b2方法,那这里调用this.b1(),这里的this就是代理对象吧!//             那调用代理对象的方法,按照前面所说,就会进入到BeanMethodInterceptor#intercept入口方法//             而在这个方法中,就可以从beanFactory中先去寻找是否有b1这个bean,//             如果有,则不用再执行原配置类中的b1方法了,//             如果没有,则执行原配置类中的b1方法,获取到b1这个bean,放入到spring容器//      而spring正是这样做的。B1 b1 = b1();b2.setB1(b1);return b2;}}public class B1 {private B2 b2;public void setB2(B2 b2) {this.b2 = b2;}public B1() {System.out.println("B1 cons...");}
}public class B2 {private B1 b1;public void setB1(B1 b1) {this.b1 = b1;}public B2() {System.out.println("B2 cons...");}}
http://www.r43.cn/news/129162.html

相关文章:

  • 青岛专业设计网站公司精准数据营销方案
  • 帮别人做钓鱼网站吗百度一下你就知道官方网站
  • wordpress采集插件郑州seo顾问热狗hotdoger
  • 福建城乡建设网站查询山东seo优化
  • 做营销网站电商网站seo
  • 网站开发的初始密码抖音怎么运营和引流
  • 织梦网站还原职业技能培训机构
  • 做的好的h游戏下载网站有哪些最近新闻热点事件
  • 电商网站硬件配置sem推广优化
  • 自己做卖东西网站今日热点新闻事件简介
  • 福永三合一网站设计不限次数观看视频的app
  • 智慧团建电脑版注册登录入口seo优缺点
  • 网站内容不显示不出来今日头条新闻消息
  • 网站项目综合设计作业 代做网络热词2023
  • l网站建设我是seo关键词
  • 最容易做的门户网站站长网站统计
  • 做网站都需要什么东西百度投诉电话人工客服24小时
  • 做动态网站的流程搜索引擎原理
  • 做网站主要是做什么金华网站推广
  • 深圳网站优化推广方案网站页面禁止访问
  • 做网站软件wartrinseo公司
  • 门户网站建设投标书上海网站推广系统
  • 主机一键wordpress宁波网站排名优化seo
  • 连江网站建设怎么建立信息网站平台
  • 织梦网站模板修改aso搜索优化
  • 做美女写真网站犯法吗友情链接互换
  • 做360手机网站首页百度seo优化多少钱
  • 网站推广软文甄选天天软文国内好用的搜索引擎
  • axure做的网站可以用吗广州seo推广优化
  • 北京的网站建设公司有哪些百度客户端登录