面向接口编程
。接口设计中,分清层次及调用关系,每层只向外(上一层)提供一层功能接口,各层间仅依赖接口而非实现类
。接口实现不影响各层的调用,这点在公共服务中尤为重要
。“面向接口编程”中的“接口”是用于隐藏具体实现和实现多态性的组件
什么是IOC
。IOC:控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器(spring容器)负责创建和维护
。DI(依赖注入)是其一种实现方式
。目的:创建对象并且组装对象之间的关系
2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢”,经过详细地分析和论证后,他得出了一个答案“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是他给“控制反转"取了一个更合适的名字”依赖注入“。它的这个答案,实际上给出了实现IOC的方法:注入。* 所谓依赖注入,就是由IOC容器在运行期间,动态的将某种依赖关系注入到对象之中。
IOC容器注入过程
. 找IOC容器
. 容器返回对象
. 使用对象
用自己创建对象,通过配置来获取对象
Bean容器初始化
. 两个基础包
- org.springframework.beans
- org.springframework.context
- BeanFactory提供配置结构和基本功能,加载并初始化Bean
- ApplicationContext保存了Bean对象并在Spring中被广泛使用
. 初始化ApplicationContext方式
- 本地文件(指定到具体的磁盘目录)
- Classpath (相对路径:相对于我们工程来说它的位置)
- Web应用中 依赖servlet或Listener
. 文件系统:
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("F:/workspace/appcontext.xml");
. Classpath:
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-context.xml);
. Web应用
<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配置的时候,完成对变量的赋值行为
ioc在加载的时候会扫描xml文件中的bean的相关配置,为这些bean进行实例化
。常用的两种注入方式
- 设值注入
- 构造注入
构造方法注入
field注入
@Controller
public class FooController {
@Autowired
//@Inject
private FooService fooService;
//简单的使用例子
public List<Foo> listFoo() {
return fooService.list();
}
}
最常用的注入方式,原因很简单
1.注入方式非常简单:加入要注入的值,附上@Autowired,即可完成
2.使整体代码简洁明了。