- 浏览: 62321 次
- 性别:
- 来自: 成都
最新评论
文章列表
//该类是一个工具类,主要封装了对对象的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 ...
//先看构造函数
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 ...