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

桂林哪里做网站北京昌平网站设计

桂林哪里做网站,北京昌平网站设计,电商个人网站建设,软件定制开发公司地址为了感谢罕哥对我工作的帮助#xff0c;特此记录下学习过程#xff0c;期待成为和罕哥一样优秀的人 时间#xff1a;2024.7.13 内容#xff1a;spring源码课程3学习记录 一、BeanDefinition BeanDefinition表示Bean的定义#xff0c;BeanDefinition中存在很多属性用来…为了感谢罕哥对我工作的帮助特此记录下学习过程期待成为和罕哥一样优秀的人 时间2024.7.13 内容spring源码课程3学习记录 一、BeanDefinition BeanDefinition表示Bean的定义BeanDefinition中存在很多属性用来描述一个Bean的特点 class表示Bean类型 scope表示Bean的作用域单例/原型 lazyInit表示Bean是否是懒加载 initMethodName表示Bean初始化时要执行的方法 destroyMethodName表示Bean销毁时要执行的方法 ........ 二、在Spring中定义Bean的方式 声明式定义 1、bean/ 2、Bean 3、Component(Service,Controller) 编程式定义 直接通过BeanDefinition此处就是Spring源码定义一个Bean的实现过程 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);AbstractBeanDefinition beanDefinition BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();beanDefinition.setBeanClass(UserService.class);beanDefinition.setScope(prototype);//把beanDefinition注册到容器中context.registerBeanDefinition(userService,beanDefinition);UserService userService (UserService)context.getBean(userService);userService.test(); 三、Spring内部的组件 下面的组件在Spring中使用的很少但是在源码中使用的很多学习有利于理解源码 1、AnnotatedBeanDefinitionReader 可以直接把某个类转换为BeanDefinition并读取解析类的注解。就是BeanDefiniton读取器。把读到的BeanDefinition存到容器中 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);AnnotatedBeanDefinitionReader annotatedBeanDefinitionReader new AnnotatedBeanDefinitionReader(context);//将UserService.class解析为BeanDefinitionannotatedBeanDefinitionReader.register(UserService.class);System.out.println(context.getBean(userService)); 2、XmlBeanDefinitionReader 可以解析bean/标签 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);XmlBeanDefinitionReader xmlBeanDefinitionReader new XmlBeanDefinitionReader(context);xmlBeanDefinitionReader.loadBeanDefinitions(spring.xml); 3、ClassPathBeanDefinitionScanner 扫描器和BeanDefinitionReader类似对某个包路径就行扫描对扫描的类进行解析如果存在Component注解就会把这个类解析为一个BeanDefinition AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext();context.refresh();ClassPathBeanDefinitionScanner scanner new ClassPathBeanDefinitionScanner(context);int i scanner.scan(org.com.zhuyn);System.out.println(context.getBean(userService)); 四、ApplicationContext与BeanFactory ApplicationContext继承了BeanFactory除此之外还继承了别的 ApplicationEnventPublisher事件发布器 EnvironmentCapable获取环境变量的功能 MessageSource进行国际化的功能 ResourcepatternResolver解析某些资源的功能 因此当我们使用applicationContext.getBean(xxx)的时候本质上是使用的DefaultListableBeanFactory来获取的。 1、ResourcepatternResolver 1拿文件资源 ApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);Resource resource context.getResource(file://C:\\Usersxxxxxxxxx);System.out.println(resource.contentLength());2拿url ApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);Resource resource context.getResource(https://www.baidu.com);System.out.println(resource.contentLength());System.out.println(resource.getURL()); 这里的Resource可以拿很多种资源。 2、ApplicationEnventPublisher 在工作当中可以直接定义一个事件发布器、 Component public class UserService {private ApplicationEventPublisher applicationEventPublisher;} 也可以使用applicationContext自带的事件发布器 Component public class UserService {Autowiredprivate ApplicationContext context;public void test(){context.publishEvent(hello);System.out.println(test);}} 事件监听器 ComponentScan(org.com.zhuyn) public class AppConfig {Beanpublic ApplicationListener applicationListener(){return new ApplicationListener() {Overridepublic void onApplicationEvent(ApplicationEvent applicationEvent) {System.out.println(发布了一个事件applicationEvent);}};} } 五、类型转化 1、PropertyEditor 把字符串转换成user对象。 类型转换器 public class StringToUserPropertyEditor extends PropertyEditorSupport implements PropertyEditor {Overridepublic void setAsText(String text) throws IllegalArgumentException {User user new User();user.setName(text);this.setValue(user);} }类型转换器的使用 ApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);StringToUserPropertyEditor propertyEditor new StringToUserPropertyEditor();propertyEditor.setAsText(xiaoming);User user (User) propertyEditor.getValue();System.out.println(user.getName()); 在spring内部也使用到了类型转换例如当我们使用这个 UserService userservice context.getBean(userServiceUserService.class) 我们传一个string类型得到一个UserService类型的对象。 2、ConversionService 3、TypeConverter 六、比较器 可以根据Order注解或实现Ordered接口来执行值进行比较从而可以进行排序。 Ordered接口实现方法 1、在类上实现Ordered接口 2、使用OrderComparator构建比较器 类A public class A implements Ordered {Overridepublic int getOrder() {return 1;} } 类B public class B implements Ordered {Overridepublic int getOrder() {return 10;} }应用 A a new A();B b new B();OrderComparator comparator new OrderComparator();System.out.println(comparator.compare(a, b));//-1 a大为1b大为-1List list new ArrayList();list.add(a);list.add(b);//按order值升序排序list.sort(comparator);System.out.println(list);//[org.com.zhuyn.Service.A2f2c9b19, org.com.zhuyn.Service.B31befd9f] Order注解实现方法 Spring提供了OrderComparator的子类AnnotationAwareOrderComparator它支持使用Order来指定order值 类C Order(1) public class C { } 类D Order(10) public class D {} 应用 C c new C();D d new D();AnnotationAwareOrderComparator comparator new AnnotationAwareOrderComparator();System.out.println(comparator.compare(c,d));//-1 七、类的元数据 在Spring中需要去解析类的信息比如类名类中的方法类上的注解这些都可以称为类的元数据。所以Spring中对类的元数据做了抽象并提供了一些工具类。 1、MetaDataReader类的元数据读取器 解析一个类得到类的所有信息。AnnotatedBeanDefinitionReader 只读取了类的注解而MetaDataReader读取了一个类的所有信息包括类的注解类继承了什么类实现了哪些方法.....等等。 MetaDataReader是一个接口默认实现类为SimpleMetadataReader。 SimpleMetadataReaderFactory simpleMetadataReaderFactory new SimpleMetadataReaderFactory();//构造一个MetaDataReaderMetadataReader metadataReader simpleMetadataReaderFactory.getMetadataReader(org.com.zhuyn.Service.UserService);//得到一个ClassMetaData并获取类名ClassMetadata classMetadata metadataReader.getClassMetadata();System.out.println(classMetadata.getClassName());//获取接口名字结果为一个数组System.out.println(classMetadata.getInterfaceNames()[0]);//类上注解的信息AnnotationMetadata annotationMetadata metadataReader.getAnnotationMetadata();for(String annotionMetadata:annotationMetadata.getAnnotationTypes()){System.out.println(annotionMetadata);} 八、过滤器 1、excludeFilters 排除类名为UserService的类,就算她上面有component注解也不会成为Bean ComponentScan(value org.com.zhuyn, excludeFilters {ComponentScan.Filter(type FilterType.ASSIGNABLE_TYPE,classes UserService.class ) }) public class AppConfig {} 2、includeFilters 就算UserService类上没有Component注解它也会被扫描成为一个Bean。 ComponentScan(value org.com.zhuyn, includeFilters {ComponentScan.Filter(type FilterType.ASSIGNABLE_TYPE,classes UserService.class )}) public class AppConfig{ } 九、FactoryBean 可以通过这个来自己创建一个Bean
http://www.hkea.cn/news/14335802/

相关文章:

  • 济源网站制作月子会所网站建设方案
  • 嘉兴网站备案去哪里有网站模板如何预览
  • html免费网页模板连云港网站seo
  • 股票网站模板 dedecmsphp网站怎么做集群
  • 郑州网站建设网络公司管理咨询公司一般是做什么的
  • 有哪些关于校园内网站建设的法律防做网站
  • 北京自助企业建站模板wordpress文件类型不受支持
  • 把插钉机子拍下怎么做网站大连中小网站建设公司
  • 昆明pc网站建设池州网站seo
  • 网站怎么做才有收录福州网站建设设计公司
  • 旅游网站的制作江苏cms建站系统
  • 网站绿标怎么做wordpress 双语言
  • 宝塔建设网站域名进不去2022年5月国内重大新闻
  • 沧州网站网站建设做服装招聘的网站
  • 做淘宝客建网站要多少费用惠阳网站推广费用
  • 好网站建设公司业务拓展公司网站建设
  • 万网网站域名注册沧浪手机网站建设公司
  • APP开发网站建设哪家好天津推广的平台
  • 电商网站搭建流程外贸软件好用的
  • 江西南昌建设厅网站wordpress文章付费支付宝
  • 驻马店网站seo房产中介网站建设
  • 重庆网站设计找重庆最佳科技百度一下就知道手机版
  • 无需代码制作app软件安徽建站优化
  • 重庆网站优化公司如何做拍卖网站
  • 站长工具在线免费观看建行手机网站网址是多少钱
  • 汉川网站建设培训班招生方案有哪些
  • 网站建设方案对比分析app开发商业计划书模板
  • wordpress幻灯片跳转杭州seo推广服务
  • 网站建设怎么找客源?微网站建设企划书
  • 企业网站一定要花钱吗一个完整的营销策划方案范文