几个重点
- 接口及面向接口编程
- 什么是IOC
- Spring的Bean配置
- Bean的初始化
- Spring的常用注入方式
接口
- 用于沟通的中介物抽象化
- 实体把自己提供给外界的一种抽象说明,用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式
- 对应Jaca接口即声明,声明了哪些方法是对外公开提供的
- 在Java8中,接口可以拥有方法体
面向接口编程
- 结构设计中,分清层次及调用关系,每层只向外(上层)提供一组功能接口,各层间仅依赖接口而非实现类
- 接口实现的变动不影响各层间的调用,这一点在公共服务中尤为重要
- “面向接口编程” 中的 “接口”是用于隐藏具体实现和实现多态性的组件
什么是IOC
- IOC:控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护
- DI(依赖注入)是其一种实现方式
- 目的:创建对象并且组装对象之间的关系
- “哪些方面的控制被反转了呢?”,获得依赖对象的过程被反转了。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入
- 控制反转被称之为依赖注入(Dependency Injection)。实现IOC的方法就是注入,所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象中。
IOC的好处
- 不必自己创建对象了
- IOC机制就提供了
- 面向接口编程了
- IOC实现了
- 不管对象了
- IOC管了
- 变好了
- 爽
单元测试
- 现在junit-*.jar并引用工程
- 创建UnitTestBase类,完成对Spring配置文件的加载、销毁
- 所有的单元测试类都继承自UnitTestBase,通过他的getBean方法获取想要得到的对象
- 子类(具体执行单元测试的类)加注解:@RunWith(BlockJUnit4ClassRunner.class)
- 单元测试方法加注解:@Test
- 右键选择要执行的单元测试方法执行或者执行一个类的全部单元测试方法
Bean容器初始化
- 基础:两个包
- org.springframework.beans
- org.springframework.context
- BeanFactory提供配置结构和基本功能,加载并初始化Bean
- ApplicationContext保存了Bean对象并在Spring中被广泛使用
- 方式,ApplicationContext
- 本地文件:FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(“F:/*/*/appcontext.xml”);
- Classpath:ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(“classpath:spring-context.xml”);
- Web应用中依赖servlet或Listener:
-<listener>
<listener-class>org.springframework.web.context.COntextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<servlet>
Spring注入
- Spring注入是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为
- 常用的两种注入方式
- 设值注入(property)
- 构造注入(construct-arg)
Spring Bean装配之Aware接口
- Spring中提供了一些以Aware结尾的接口,实现了Aware接口的bean在被初始化之后,可以获取相应的资源
- 通过Aware接口,可以对Spring相应资源进行操作(慎重)
- 为对Spring进行简单的扩展提供了方便的入口
Resources
- 针对于资源文件的统一接口
- Resources
- UrlResource:URL对应的资源,根据一个URL地址即可构建
- ClassPathResource:获取类路径下的资源文件
- FileSystemResource:获取文件系统里面的资源
- ServletContextResource:ServletContext封装的资源,用于访问ServletContext环境下的资源
- InputStreamResource:针对于输入流封装的资源
- ByteArrayResource:针对于字节数组封装的资源
- ResourceLader
- All aoolication contexts implement the ResourceLoader interface,and therefore all application contexts may be used to obtain Resource instances.
public interface ResourceLoader{
Resource getResource(String location);
}
Resource template = ctx.getResource("some/resource/path/myTemplate.txt");
Resource template = ctx.getResource("classpath:some/resource/path/myTemplate.txt");
Resource template = ctx.getResource("file:/some/resource/path/myTemplate.txt");