BeanNameAware
接口,会调用它实现的setBeanName(String)
方法,传递Spring配置文件中Bean的id值。setBeanFactory(setBeanFactory(BeanFactory)
传递Spring工厂自身(可以用这个方式来获取其它Bean,只需在Spring配置文件中配置一个普通的Bean就可以);setApplicationContext(ApplicationContext)
方法,传入Spring上下文(同样这个方式也可以实现步骤4的内容,但比4更好,因为ApplicationContext是BeanFactory的子接口,有更多的实现方法);postProcessBeforeInitialization(Object obj, String s)
方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术;postProcessAfterInitialization(Object obj, String s)
方法、;注:以上工作完成以后就可以应用这个Bean了,那这个Bean是一个Singleton的,所以一般情况下我们调用同一个id的Bean会是在内容地址相同的实例。
destroy-method
属性,会自动调用其配置的销毁方法。BeanFactory
:bean工厂接口;负责创建bean实例;容器里面保存的所有单例bean其实是一个map;Spring最底层的接口ApplicationContext
:是容器接口;更多负责容器功能的实现;(可以基于BeanFactory创建好的对象之上完成强大的容器)Spring框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IOC (Inversion of Control,控制反转) 和 AOP(Aspect Oriented Programming,面向切面编程)。
优点:
Spring 能帮我们做什么?
①.Spring 能帮我们根据配置文件创建及组装对象之间的依赖关系。
②.Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
③.Spring 能非常简单的帮我们管理数据库事务。
④.Spring 还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板来方便数据库访问。
⑤.Spring 还提供与第三方Web(如Struts1/2、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。
⑥.Spring 能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。
控制反转
@Component,标注为一个普通的bean
@Service
@Repository
依赖注入
@Autowired
@Qulifier
@Resource
@Value
全局配置
@Configuration,代替配置文件,相当于beans
@ComponentScan,配置扫描包
@Scope,配置bean的生命周期
1、建造者模式(Builder Pattern)
使用多个简单的对象一步一步构建成一个复杂的对象。它提供了一种创建对象的最佳方式。例如SqlSessionFactoryBuilder
、XMLConfigBuilder
、XMLMapperBuilder
等
XMLConfigBuilder :XML配置构建器,建造者模式,继承BaseBuilder
2、 简单工厂模式(Simple Factory Pattern)
又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式,专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。如:
SqlSessionFactory
:创建SqlSession对象。
ObjectFactory:对象工厂
:所有对象都要由工厂来产生 。
MapperProxyFactory
:创建映射器代理 MapperProxy对象。
3、 单例模式(Singleton Pattern)
三个要点:
如:ErrorContext
和LogFactory
ErrorContext
:用在每个线程范围内的单例,用于记录该线程的执行环境错误信息,
LogFactory
:是提供给整个Mybatis使用的日志工厂,用于获得针对项目配置好的日志对象。
4、代理模式(Proxy Pattern)
Mybatis核心使用的模式,给某一个对象提供一个代理,并由代理对象控制对原对象的引用。它是一种对象结构型模式。
如MapperProxy
为绑定我们开发的Mapper
和Mapper.xml
创建代理类、Plugin为每个插件创建一个代理类等。
5、组合模式
组合多个对象形成树形结构以表示“整体-部分”的结构层次。
组合模式最关键的地方:叶子对象和组合对象实现相同的接口。
例如SqlNode
和各个子类ChooseSqlNode
等;
6、适配器模式(Adapter Pattern)
作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
例如Log的Mybatis
接口和它对jdbc、log4j等各种日志框架的适配实现
7、模板方法模式(Template Pattern)
是基于继承的代码复用的基本技术。模板方法模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
例如BaseExecutor
和SimpleExecutor
,还有BaseTypeHandler
和所有的子类如IntegerTypeHandler
;
8、装饰器模式(Decorator Pattern)
装饰器模式:允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
例如Cache
包中的cache.decorators
子包中等各个装饰者的实现;
9、迭代器模式(Iterator)
又叫游标(Cursor)模式。GOF定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
例如迭代器模式PropertyTokenizer
;