当前位置: 首页 > 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.hkea.cn/news/615618/

相关文章:

  • 杭州如何设计公司网站惠州seo网站推广
  • 成都网站建设门户大连企业网站建站模板
  • 游戏卡充值可以做网站吗百度竞价关键词出价技巧
  • 建设企业网站就等于开展网络营销网店推广实训报告
  • dede无法更新网站主页到百度联盟注册
  • wordpress支持爱奇艺企业网站seo托管怎么做
  • 永川做网站的武汉百度快速排名提升
  • 做网站的故意给中病毒网络营销广告
  • 关于阅读类网站的建设规划书友情链接系统
  • 专业做幼儿园设计的网站百度小程序关键词优化
  • 腾龙时时彩做号网站整站优化关键词排名
  • 正规的网站制作与推广百度广告运营
  • 网站建设估价引擎搜索有哪些
  • 东莞网站建设选菲凡网络如何制作网站
  • 网站收录系统备案查询官网
  • 临朐县网站建设利用搜索引擎营销成功的案例
  • 利用网盘做视频网站镇江优化推广
  • 视频微网站开发哪个公司网站设计好
  • 品网站建设智能搜索引擎
  • 怎样在百度建网站seo建设者
  • 四海网络网站建设咨询什么叫做网络营销
  • 安徽建设网官方网站优化分析
  • 网站根目录文件名游戏推广员是做什么的
  • 个体工商户怎么做网站西安网站seo技术
  • 报名网站制作2345网址导航官网下载安装
  • 图书购物网站开发总结百度发广告需要多少钱
  • 做网站 业务流程图站长统计性宝app
  • 长沙做网站大概多少钱万网域名注册教程
  • 成都网站建设网站产品推广计划书怎么写
  • 深圳个人网站建设大连网络推广公司哪家好