Spring官网方便查看源代码
http://spring.io/
http://projects.spring.io/spring-framework/
Keys:Spring IOC AOP Bean 注释和配置轻量级 大小和开销小
Abstract:
IoC控制反转-松耦合。
AOP面向切面-可以分离应用的业务逻辑和系统级服务进行内聚性的开发。
包含并管理应用对象的配置和生命周期,这个意义上是一种容器。
将简单组件配置组合成为复杂的内容,这个意义上是一种框架。
框架就是制定一套规范或者规则,大家在该规范或者规则(思想)下工作。
接口和面向接口编程
用于沟通的中介物的抽象化。
实体把自己提供给外界的一种抽象化说明,用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方法。
结构设计中,分清层次及调用关系,每层只向外(上层)提供一组功能接口,各层间仅依赖接口而非实现类。
接口实现的变动不影响各层间的调用。
IOC
OC控制反转
控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护。
DI依赖注入是一种实现方式。
创建对象并且组装对象之间的关系。
获得依赖对象的过程被反转了,所以更合适的名字叫做依赖注入Dependency Injection。
Bean
Xml文件,版本编码xsi地址
<bean id=”” class=””></bean>
或者注释
两个基础包org.springframework.beans和org.springframework.context
BeanFactory提供配置结构和基本功能,加载并初始化Bean
ApplicationContext保存了Bean对象并在Spring中被广泛使用
设值注入
<property name=” injectionDAO” ref=” injectionDAO”/>
<bean id=” injectionDAO” class=””></bean>
在类里private 接口 利用set方法注入。其中类中private 接口 变量名,变量名应该和bean中的property的name相同,ref与注入的bean的id相同。(这里的关系类似于IA a = new A();IA是接口,a是变量名也是property的name,new就是注入的过程即通过ref链接另一个bean。)
构造注入
<constructor-arg name=”injectionDAO” ref=”injectionDAO”
<bean id=” injectionDAO” class=””></bean>
在类里private 接口 利用构造器注入。
注意名称的匹配。
Bean配置项
Id Class
Scope作用域singleton prototype request session global-session
Constructor-arguments Property Autowiring-mode Lazy-initialization-mode
Initialization/destruction-method
Bean的生命周期:
定义 <bean/>
初始化 实现InitializingBean接口覆盖afterProperiesSet方法 自动调用该方法
配置init-method属性编写init()方法实体
使用
销毁 实现DisposableBean接口覆盖destroy方法 调用destroy()方法
配置destroy-method 编写cleanup()方法
配置全局默认初始化,销毁方法。Default-init/destroy-method = “init/destroy”(在<beans></beans中)
Bean的自动装配(Autowiring)
No byname bytype Constructor在spring beans里设置属性 defaultauto
Aware接口
Spring中提供了一些以Aware结尾的接口,实现了Aware接口的Bean在被初始化之后可以获取相应资源。通过Aware接口可以对Spring相应资源进行操作(慎用)为对Spring进行简单的扩展提供了方便的入口。具体Aware接口看spring-api。
Resources接口
针对于资源文件的统一接口,以resources结尾。通过ResourceLoader接口加载。
Bean管理的注释实现
Classpath扫描与组件管理
Spring3.0开始可以使用java注解定义bean,@Configuration,@Bean,@Import,@DependsOn
其中@ Component是一个通用注解可以用于任何bean。可以使用过滤器进行扫描bean。
类的自动检测于注册Bean
<context:annotation-config/>(<context:component-scan base-package=””scope-resolver=””>)
@Component,
@Repository(DAO类),
@Service(Service类),
@Controller(Controller类),
@Required,@Autowired,@Qualifier,@Resource
@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier使用
可以注释@Scope确定作用域(singleton,prototype等)
Scoped-proxy属性指定代理?
单元测试
junit-*.jar,创建UnitTestBase类,完成对Spring配置文件的加载销毁。所有的单元测试类都继承自UTB,通过他的getBean方法获取想要得到的对象。子类(具体指向单元测试的类)加注解:@RunWith(BlockJUnit4ClassRunner.class)单元测试方法加注解:@Test。右键选择要执行的单元测试方法执行或者指向一个类的全部单元测试方法。
Question
Spring对象在什么时候被创建
通常来说在载入配置文件的时候就被创建了,但是如果bean的属性设置有lazy-init=”true”的话就会在调用getBean()方法的时候调用(手动或者封装在内部)。