spring是什么
- spring是一种为java应用程序提供基本服务的轻量级框架。用于简化企业应用程序的开发,使开发者只关心业务需求
主要包括七个模块
- springContext:提供框架式的bean访问方式
- springCore:核心IOC和DI服务
- springBeans:提供beanFactory,spring将管理对象称为bean
- springAop:面向切面编程
- springJDBC:对jdbc的抽象封装,简化了jdbc操作和数据库访问异常处理
- springWeb:提供了web开发相关的集成特性,例如文件上传
- springTest:为测试提供支持
用到了哪些设计模式
- 工厂模式:创建对象交给BeanFactory工厂
- 单利模式:bean默认单例模式
- 代理模式:AOP功能用到了JDK动态代理
- 模板模式:用来解决代码重复的问题,比如RestTemplate、JmsTemplate、JpaTemplate
- 观察者模式:当一个对象发生改变时,依赖它的对象会得到通知和更新,例如applicationListener
spring优点
- 属于低侵入式的设计,代码污染性低
- spring DI将对象之间的关系交给框架处理,降低耦合度
- springAop支持对一些通用任务、事务、日志的集中管理,提高了代码的重用性
- 对主流框架提供了集成支持
springIOC
- ioc就是控制反转,指把创建对象权利交给了spring,并且spring根据配置文件管理实例与实例之间的依赖关系
- ioc有三种注入方式:构造器注入、setter注入、注解注入
SpringAop
- 即面向切面编程,将那些与业务无关的公共代码抽取封装成一个可重用的模块。比如权限认证、事务、日志。
- springAop使用的是动态代理,不会去修改字节码,AspectJ是静态代理,会将AspectJ(切面)加入到字节码中
tips
- 连接点:程序运行中所执行的方法
- 切面:被抽取出来的公共模块(使用@AspectJ实现)
- 切点:对连接点拦截的方法
Spring通知类型
- 前置、后置、异常、环绕、返回后通知,都是相对于连接点
spring中Bean的生命周期
- bean实例化–>bean属性注入–>调用SetbeanName()和SetBeanFactory()–>调用Bean初始化方法–>然后bean就可以使用了–>容器关闭调用destory()方法或自定义的销毁方法–>结束
BeanFactory和applicationContext的区别
- applicationContext是beanFactory的子类,提供了更多的功能,beanFactory是spring最底层的接口,提供了最简单的容器功能,applicationContext支持国际化、同一资源文件的访问方式、可以同时加载多个配置文件,在启动时就把所有的bean实例化了
spring中的单例bean是线程安全的吗
- 不是,spring没有对单例的bean进行多线程封装处理,但大多数bean都是无状态的(没有数据存储功能),所以某种程度上它是安全的
- 改变bean的Scope作用域单例singleton–>多例prototype即线程安全了,还可以用ThreadLocal实现线程安全