其采用的关键策略:
1)基于pojo的轻量级、最小侵入性编程;
POJO(Plain Ordinary Java Object)即普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO。实际意义就是普通的JavaBeans(简单的实体类),特点就是支持业务逻辑的协助类。POJO类的作用是方便程序员使用数据库中的数据表,对于程序员来说,可以很方便的将POJO类当作对象来进行使用,也可以方便的调用其get,set方法。
通过依赖注入来装配pojo;
2)依赖注入和面向接口实现松耦合;
耦合具有两面性,紧密耦合使得代码难以复用,并且出现打地鼠式得bug;完全没有耦合的代码没有实际意义;依赖注入(DI)就是对象的依赖关系将由复杂协调系统中各个对象的第三方组件在创建对象时设定。不需要new而是作为参数传入,这是其中一种依赖注入方式,构造器注入;
常用的注入方式主要有三种:构造方法注入,set方法参数注入,接口注入。
创建应用组件之间写作的行为称为装配;spring有多种装配bean的方式,采用xml配置最为常见;
Spring通过应用上下文(Application Context)装载bean的定义并把它们组装起来,Spring应用上下文全负责对象的创建和组装;
3)基于切面和惯例进行声明式编程;
AOP切面允许松散耦合的功能形成可重用的组件;常用日志、事务管理和安全等切面关注点的部分;aop使这些服务模块化,并以声明的方式将他们应用到需要影响的组件中;
需要在Spring配置文件中声明切面,
先声明为一个bean,然后引用该bean,进一步定义切面,before为前置通知,after为后置通知;
4)通过切面和模板封装;
例如数据库链接、关闭数据库链接等都通过模板来解决代码冗余。Spring通过JdbcTemplate使得避免传统JDBC版式代码;
private DataSource dataSouce;
/**
* 加载jdbc
* @return
*/
public JdbcTemplate getJdbcTemplate() {
return new JdbcTemplate(dataSouce);
}
1)Spring自带容器:Bean工厂简单容器,提供基本的DI支持;应用上下文,基于BeanFactory之上构建,并提供面向应用的服务,例如从属性文件解析文本信息的能力,以及发布应用事件给感兴趣的事件监听者的能力。
2)Spring自带几种类型的上下文:
通过现有的应用上下文引用,可以通过调用应用上下文的getBean()方法从Spring容器中获取bean;
3)Bean的生命周期
(1)spring对bean实例化;
(2)spring将值和bean的引用注入到bean对应的属性中;
(3)如果bean实现了BeanNameAware接口,将bean的ID传递给setBeanName()接口方法;
(4)如果bean实现了BeanFactoryAware接口,调用setbeanFactory()接口方法,将beanFactory容器实例传入;
(5)如果有定义BeanPostProcessor接口,则调用该接口的postProcessBeforeInitialization(Object bean, String beanName)方法该方法可以对Bean实例进行额外的增加处理操作。可以是全局针对所有Bean进行统一处理,ApplicationContext初始化时会自动找到实现该接口的类进行所有Bean的增强处理;
(6)如果Bean实现了InitializingBean接口,且该接口有 @PostConstruct修饰的方法,则执行该方法(该注解方法是BeanPostProcessor的postProcessBeforeInitialization中执行的),然后执行afterPropertiesSet()方法;该方法没有参数,不能对该Bean进行处理,可以增加比如日志、读取配置文件之类的操作;
(7)如果Bean自定义了init-method指定的方法,则调用该方法;
(8)接着调用BeanPostProcessor接口的postProcessAfterInitialization(Object bean, String beanName)方法;
(9)如果Bean实现了DisposableBean接口,则调用该接口的destory()方法。同InitializingBean类似,该接口如果有指 @PreDestory注解修饰的方法,也会先调用该方法;
(10)如果Bean指定了destory-method方法,则执行该方法;
补充:
Spring Boot
基本上是Spring
框架的扩展,它消除了设置Spring
应用程序所需的XML配置
,为更快,更高效的开发生态系统铺平了道路。
持续更新,未完待续。。。。