`
文章列表

读Objects源码

    博客分类:
  • java
//该类是一个工具类,主要封装了对对象的equals,hashcode,compare和check 异常等方法。 //先看构造函数: //工具类,所以构造函数是私有的。防止反射创建对象所以抛出异常。 private Objects() { throw new AssertionError("No java.util.Objects instances for you!"); } //判断两个对象是否相等。 public static boolean equals(Object a, Object b) { ...
//该类是jdk1.8新增的类,主要是为了解决NPE问题。 //先看构造函数: private Optional() { this.value = null; } private Optional(T value) { this.value = Objects.requireNonNull(value); } //可以看到构造函数都是私有的。所以可以推测创建该对象的方法应该是静态的。 //来看创建对象的方法:(都是静态方法) //结合上面的构造方法可以看到如果传入的value为null,会抛 ...
springmvc的执行过程: 一个请求执行的是DispatcherServlet的doService方法: protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception { if (logger.isDebugEnabled()) { String resumed = WebAsyncUtils.getAsyncManager(request).hasConcurrentResult() ? " resum ...
先从核心DispatcherServlet入手: 既然是servlet那我们先来看serlvet的初始化: @Override public final void init() throws ServletException { if (logger.isDebugEnabled()) { logger.debug("Initializing servlet '" + getServletName() + "'"); } // Set bean properties from init parame ...
实现类似于mybatis一对多关系和一对一关系: 上代码: /** * @author * @version 创建时间:2017年3月23日 上午11:01:39 * @description 定义1对多关系注解 value代表要发射的字段名 */ @Target({ ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Association { String[] value() default {}; } /** * @aut ...
实现类似于mybatis的配置关系一对多或者一对一的实现:基于<XML>实现: 先上个配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper> <resultMap ID=" ...
//实现了BeanDefinitionRegistryPostProcessor和InitializingBean接口 //所以首先会调用 //判空扫描的包 public void afterPropertiesSet() throws Exception { notNull(this.basePackage, "Property 'basePackage' is required"); } //然后调用 public void postProcessBeanDefinitionRegistry(BeanDefinitionRegist ...
//初始化SqlSessionFactoryBean //SqlSessionFactoryBean实现了InitializingBean来进行初始化 public void afterPropertiesSet() throws Exception { notNull(dataSource, "Property 'dataSource' is required"); notNull(sqlSessionFactoryBuilder, "Property 'sqlSessionFactoryBuilder' is required&quo ...
//BeanNameAware该接口主要用于获取自身在spring中的名称 public interface BeanNameAware extends Aware { void setBeanName(String name); } //其实现原理也是在创建bean的时候进行注入 //AbstractAutowireCapableBeanFactory类下 protected Object initializeBean(final String beanName, final Object bean, RootBeanDefinition mbd) { if ...
//该接口会帮你注入ApplicationContext public interface ApplicationContextAware extends Aware { void setApplicationContext(ApplicationContext applicationContext) throws BeansException; } //其实现原理为在创建bean的时候由spring框架来注入: //该类位于AbstractAutowireCapableBeanFactory下 protected Object doCreateBean(final S ...
//该接口继承自BeanFactoryPostProcessor,该接口可用于动态像spring注册bean //例如在spring跟mybatis的整合中MapperScannerConfigurer就实现了该类用于动态注册mapper。 public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor { void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws Bea ...
//该接口主要用于从spring中获取bean的时候如果实现了该接口会直接调用该接口中的getObject来获取bean public interface FactoryBean<T> { T getObject() throws Exception; Class<?> getObjectType(); boolean isSingleton(); } /** 其在获取bean的时候判断是否实现了FactoryBean接口从这也可以看出如果一个类实现了FactoryBean接口但是我们想要返回他本身的实例, 我 ...
//记录几个spring的接口以及使用 //从名字可以看出来这个接口主要用于初始化bean用。在bean被初始化后就会执行afterPropertiesSet方法。 public interface InitializingBean { void afterPropertiesSet() throws Exception; } //其实现原理如下该方法在AbstractAutowireCapableBeanFactory中 protected void invokeInitMethods(String beanName, final Object bean, Roo ...
//该类是StringBuilder和StringBuffer基类实现了Appendable和CharSequence接口 //StringBuffer是线程安全的.所以就在所有方法上加上了synchronized关键字。 //先看构造函数 AbstractStringBuilder() { } AbstractStringBuilder(int capacity) { value = new char[capacity]; } //返回长度 public int length() { return cou ...

读String源码

    博客分类:
  • java
//先看构造函数 public String() { this.value = new char[0]; } public String(String original) { this.value = original.value; this.hash = original.hash; } public String(char value[]) { this.value = Arrays.copyOf(value, value.length); } //从offset ...
Global site tag (gtag.js) - Google Analytics