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

济南 手机网站制作电子商务网站的建设 论文

济南 手机网站制作,电子商务网站的建设 论文,2018做网站的软件,杭州网站建设培训手写spring笔记 《Spring 手撸专栏》笔记 IoC部分 Bean初始化和属性注入 Bean的信息封装在BeanDefinition中 /*** 用于记录Bean的相关信息*/ public class BeanDefinition {/*** Bean对象的类型*/private Class beanClass;/*** Bean对象中的属性信息*/private PropertyVal…手写spring笔记 《Spring 手撸专栏》笔记 IoC部分 Bean初始化和属性注入 Bean的信息封装在BeanDefinition中 /*** 用于记录Bean的相关信息*/ public class BeanDefinition {/*** Bean对象的类型*/private Class beanClass;/*** Bean对象中的属性信息*/private PropertyValues propertyValues;/*** 初始化方法的名称*/private String initMethodName;/*** 销毁方法的名称*/private String destroyMethodName;/*** 默认为单例模式*/private String scope; }Bean注入过程中有一下几个主要接口 BeanFactoryBean工厂接口其中声明了获取Bean对象的方法SingletonBeanRegistry: Bean的单例模式创建接口声明了单例对象的创建方法和销毁方法InstantiationStrategy实例化Bean对象的策略接口申明了Bean对象使用何种方式实例化对象的方法在实现类中使用反射的方式获取构造方法来得到Bean对象有JDK和Cglib两种实现BeanDefinitionRegistry管理BeanDefinition的注册其实现类中包含存有BeanDefinition的Map 其具体流程为 从BeanDefinitionRegistry得到BeanDefinition信息调用BeanFactory的getBean()方法判断是否为单例模式若为单例模式则调用SingletonBeanRegistry的getSingleton()方法如果容器中存在Bean则直接返回不存在则调用InstantiationStrategy的instantiate()方法使用反射的方式生成Bean对象 在属性注入中需要注入的属性信息封装在BeanDefinition的PropertyValues中其本质为一个PropertyValue列表。 在创建Bean对象时若存在无参构造方法则使用无参构造方法若没有则从PropertyValues去除构造方法需要的属性。 /*** Bean对象中的属性值*/ public class PropertyValue {/*** Bean对象属性的名称*/private String name;/*** Bean对象中属性的实例化对象*/private Object value; }资源加载器 Spring需要解析配置文件对此定义了一下接口 Resource资源信息接用于处理资源加载流其实现类根据配置文件地址得到资源信息并向外声明有得到输入流的接口其包含XML文件配置和URL文件配置等方式ResourceLoader资源加载器接口通过该接口获取路径对应的资源对象用于获得资源对象BeanDefinitionReaderBeanDefinition读取接口用于读取配置文件并调用BeanDefinitionRegistry加载BeanDefinition Bean生命周期 Bean的初始化操作提供了Bean的初始化和销毁等方法接口其包括 InitializingBean提供了初始化方法的Bean如果Bean实现了该接口则会在创建Bean时调用初始化方法DisposableBean提供了Bean销毁方法若实现了该接口则在容器销毁时调用其销毁方法 此外在BeanDefinition中包含有initMethodName和destroyMethodName两个属性用于指派Bean的初始化方法和销毁方法可以在不实现上述接口的情况下使用反射的方式实现初始化和销毁方法在XML中配置init-method和destroy-method两个属性即可 同时定义有一下两个接口来管理Bean的初始化操作 /*** Bean实例化前对其进行预处理的接口提供修改BeanDefinition的方法*/ public interface BeanFactoryPostProcessor {/*** 所有的BeanDefinition加载完成后而Bean对象实例化之前调用提供修改BeanDefinition的机制** param beanFactory* throws BeansException*/void postProcessorBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException; }/*** 对Bean对象初始化前后进行处理的接口提供Bean初始化前后对其进行操作的方法*/ public interface BeanPostProcessor {/*** 在Bean对象执行初始化前对Bean实例对象进行操作** param bean 被操作的Bean对象* param beanName 被操作的Bean对象的名称* return* throws BeansException*/Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;/*** 在Bean对象执行初始化后对Bean实例对象进行操作** param bean 被操作的Bean对象* param beanName 被操作的Bean对象的名称* return* throws BeansException*/Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException; }Bean工厂接口 对于复杂类型的Bean其提供了FactoryBeanT接口对于实现了该接口的类spring在创建Bean对象时不是直接生成该对象而是调用getObject方法来生成Bean对象 /*** Bean对象的工厂接口声明了从工厂获得Bean对象的方法*/ public interface BeanFactory {/*** 有参方式获取Bean** param name Bean名称* return Bean对象实例* throws BeansException Bean创建时异常*/Object getBean(String name) throws BeansException;/*** 有参方式获取Bean** param name Bean名称* param args 参数* return Bean对象实例* throws BeansException Bean创建时异常*/Object getBean(String name, Object... args) throws BeansException;/*** 按类型获取Bean对象** param name Bean对象名称* param requiredType Bean对象类型* param T Bean对象类型* return Bean对象实例*/T T getBean(String name, ClassT requiredType) throws BeansException;T T getBean(ClassT requiredType) throws BeansException; }Aware感知接口 对于实现了Aware接口的Bean在spring创建实例时会将对应的信息注入到Bean中方便使用者对spring进行自定义扩展开发其包括如下几类接口 BeanFactoryAwareBeanClassLoaderAwareBeanNameAwareApplicationContextAware 事件监听机制 使用观察者模式设置了事件监听机制 ApplicationEvent继承自EventObject接口Spring Event事件抽象类后续的所有事件类都继承自该类ApplicationListenerE extends ApplicationEvent继承自EventListener接口其泛型类型为该监听器关注的事件类型ApplicationEventMulticaster事件广播器接口定义有添加和删除监听器以及广播监听事件的方法 在使用过程中首先调用ApplicationEventMulticaster的addApplicationListener方法将自定义监听器加入到广播器中当要发布事件时调用multicastEvent方法该方法会便利已注册的所有监听器并向关注该事件的监听器发送通知调用其onApplicationEvent方法 应用上下文 接口ApplicationContext整合了上述的各种方法并提供了向外的操作接口。其中ApplicationContext的实现类中定义了核心方法refresh()其具体内容如下 Overridepublic void refresh() throws BeansException {// 创建BeanFactory并加载BeanDefinitionrefreshBeanFactory();// 获取BeanFactoryConfigurableListableBeanFactory beanFactory getBeanFactory();// 添加ApplicationContextAwareProcessor对象处理ApplicationContextAwarebeanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));// 在Bean实例化之前执行BeanFactoryPostProcessor方法invokeBeanFactoryPostProcessors(beanFactory);// 将BeanPostProcessor提前注册到容器中registerBeanPostProcessors(beanFactory);// 提前实例化单例Bean对象beanFactory.preInstantiateSingletons();// 初始化事件发布者initApplicationEventMulticaster();// 注册事件监听器registerListeners();// 发布容器刷新完成事件finishRefresh();}三级缓存机制 为了解决循环依赖spring使用了三级缓存如下所示 /*** Bean容器一级缓存用于存储Bean的完整实例化对象*/private MapString, Object singletonObjects new HashMap();/*** Bean容器二级缓存用于存储Bean的早期非完整实例化对象*/private MapString, Object earlySingletonObjects new HashMap();/*** Bean容器三级缓存用于存储Bean的代理对象*/private MapString, ObjectFactory? singletonFactories new HashMap();/**其中三级缓存存储的不是Bean对象而是一个工厂对象其目的是为了提早暴露Bean等到后续的Bean依赖该Bean的时候就会调用工厂的getObject方法获取到Bean对象。三级缓存的顺序如下 Overridepublic Object getSingleton(String beanName) throws BeansException {Object singletonObject singletonObjects.get(beanName);if (singletonObject null) {// 如果没有完整对象则从二级缓存中获取未完整实例化的对象singletonObject earlySingletonObjects.get(beanName);if (singletonObject null) {// 如果二级缓存中也没有则从代理对象处生成未完成的实例化对象并删除代理对象ObjectFactory? singletonFactory singletonFactories.get(beanName);if (singletonFactory ! null) {singletonObject singletonFactory.getObject();earlySingletonObjects.put(beanName, singletonObject);singletonFactories.remove(beanName);}}}return singletonObject;}注解配置信息 这里给出了一下几个注解功能的实现 Component将类注入到容器中Autowired对Bean对象对应的该属性进行依赖注入Scope配置该类的作用域为单例还是原型Value注入配置文件中的信息 通过读取配置文件中context:component-scan /指定的路径对其下所有的类进行扫描若标注有Component注解则生成对应的BeanDefinition并读取其属性生成对应的PropertyValue若属性标注有Value注解表示属性值为配置文件中的对应数值若标注有Autowired注解则表示属性值为Bean。生成好BeanDefinition后就和原本流程一样了 AOP 切点和匹配接口定义 AOP的核心是使用代理的方式生成代理对象其核心接口包括 ClassFilter定义类匹配类用于切点找到给定的接口和目标类提供了判断切入点是否应用在给定的接口或目标类中的方法MethodMatcher方法匹配类找到表达式范围内匹配下的目标类和方法提供了判断给定的方法是否匹配表达式的方法Pointcut切入点接口定义用于获取ClassFilter、MethodMatcher的两个类AopProxy代理接口用于获取代理类 使用了JDK和AspectJ两种方式实现了上述接口并通过ProxyFactory工厂类来对两种实现的选择进行了封装 AOP融入Bean生命周期 将AOP融入Bean的声明周期其利用了BeanPostProcessor接口使用该接口的postProcessAfterInitialization对实例化后的原对象进行包装返回其代理对象 其定义了Advisor访问者接口整合切面pointcut和拦截器advice 对于反射要用的advice接口定义了继承自该接口的BeforeAdvcice等接口提供前置方法等AOP方法接口。同样地对于拦截器MethodInterceptor也封装了对应的MethodBeforeAdviceInterceptor等类来实现各种AOP操作
http://wiki.neutronadmin.com/news/102999/

相关文章:

  • 网站建设分为那几个模块wordpress的配置文件
  • 网站开发留言板代码专业团队黑人抬棺图片
  • 网站策划怎么样腾讯企业邮箱注册入口官网
  • 阿里云虚拟主机wordpress建站教程怎么做切片网站
  • 网站关键词的选择江南大学做网站
  • 物流网站推广怎么做西安自适应网站建设
  • 广州可以做票务商城的网站公司那些网站平台可以做3d建模
  • 怎么样免费建网站wordpress广告插件
  • 美食网站网页设计国际域名注册查询
  • 深圳建筑公司排行榜四川短视频seo优化网站
  • 备案 网站错了中国域名拍卖网
  • 内容网站模板网站开发教程收费版
  • 电脑做网站教学php构建网站如何开始
  • 笋岗网站建设个人主页的html设计
  • 响应式网站一般做多大长春微信网站建设
  • 百度地图嵌入公司网站建建设人才市场官方网站
  • 大学生实训网站建设心得建设网站怎么搞
  • 做做网站需要多少钱网站制作方案模板
  • 国外vi设计网站全国工商企业查询官网
  • 官方网站建设调研报告海口h5建站
  • 服装设计网站哪个好中山百度网站排名
  • 国外网站谷歌seo推广编程教程免费视频
  • 宁夏网站营销推广织梦网站怎么修改内容
  • 邯郸市建设局网站政策阿里巴巴网站建设缺点
  • 给小孩子做网站什么是搜索引擎优化用一句话概括
  • 营销型网站建设 课程做电影网站会被捉吗
  • 网站内页怎样做优化百姓网二手房
  • wordpress可以做电影网站吗网页设计形考作业2
  • 网站备案登录密码找回在线编辑图片的网站有哪些
  • 东营企业网站建设wordpress长文章自动分页