spring主要思想:简化Java开发
为了降低Java开发的复杂性,spring采取了以下4种关键策略
1.基于POJO的轻量级和最小侵入式编程:不会强迫用户实现spring规范的接口或抽象类,并尽可能地不破坏代码,除非使用了注解
2.通过依赖注入和面向接口实现松耦合:通过在方法或接口中进行构造器注入其它类,并结合java中多态的特性(子类型可以向上造型为父类型)实现松耦合
3.基于切面和惯例进行声明式编程:基于切面:当有多个组件用到同一组件时,可以将同一组件声明为切。声明式编程:spring可以通过注解来声明一个特定的spring支持并容纳的bean,这样无需继承spring的类,便可使用特定的功能。
4.通过切面和模板减少样板式代码:将散落在程序中的冗余代码当做一个切面处理,在一个方法执行前,后等调用另一个方法,可以减少很多代码,样板式代码:spring封装的jar,例如spring jdbcTemplate将jdbc中的打开连接,关闭连接等封装,使程序员只关注于要实现的功能
spring的核心:在spring中,任何的类和java bean都被当做bean处理,这些bean通过容器进行管理,spring容器实现了IOC和AOP机制,简化了bean对象的创建和解耦
容器的实现方式:
1.BeanFactory:最简单的容器
2.applicationContext:Beanfactory的子接口,提供了更多的高级特性,是最常见的实现方式
容器创建bean的三种方式:
1.构造器实例化(重点):<bean id="" class=""/>
2.静态工厂实例化(暂不理解):<bean id="" class="" factory-method=""> factory-method为指定工厂中创建bean的方法,在类中应该为static修饰
3.实例工厂初始化(暂不理解):<bean id=”” class=”” factory-bean=”” factory-method=””/> factory-bean;用于指定工厂对象
bean的作用域:
1.单例(singleton):在整个应用中只创建一个bean实例
2.原型(prototype):每次注入或者通过spring应用上下文获取的时候都会创建一次
3.会话(session):在每一次http session中,都创建一个bean实例(只限web应用)
4.请求(request):在每次http请求中,都创建一个bean实例(只限web应用)
bean其它常用可选项
<bean scope="" lazy-init="" init-method="" destroy-method="" />
1.scope:为bean的作用域,默认为单例
2.lazy-init:延迟加载,被延迟的bean在第一次被使用时初始化,而不是在spring应用上下文启动时被初始化
3.init-method:指定初始化回调方法
4.destory-method:在单例模式下适用,指定销毁回调方法
书籍:(spring in action)