接口
- 用于沟通的中介物的抽象化
接口是沟通中的一种说明,一种规范。 - 实体把自己提供给外界的一种抽象化说明,用以由内部操作分离出外部沟通方法,使其能够修改内部而不影响外界其他实体与其交互的方式
对外部说明了我会提供哪些功能,至于对内部是怎么实现的是不公开的;比如我有实现注册的功能,你只用告诉我手机号等信息就可以实现注册,但注册功能是如何实现的,逻辑是什么样的,怎么判断的,数据存储在哪等等,都是不公开的 - 对应java接口即声明,声明哪些方法是对外公开提供的
java里面有接口、抽象类、提供的类,其中接口有声明不能有实现;抽象类是既可以有声明,也可以有实现;类完全只能有实现 - 在java8中,接口也可以有方法体
在某种程度上接口和抽象类拥有同样的功能
面向接口编程
- 结构设计中,需要分清层次及调用关系,每层只向外(上层)提供一组功能接口,各层间只依赖接口而非实现类
- 接口实现的变动不影响各层之间的调用,这一点在公共服务中尤为重要
- “面向接口编程”中的“接口”是用于隐藏具体实现和实现多态性的组件
什么是IOC
IoC是Inversion of Control的缩写,即控制反转的意思,是解决程序耦合性的一种思想。通常创建对象的时候使用new关键字,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。解决程序耦合性的办法有很多,而依赖注入(DI)这一功能就是IOC思想的一种具体实现
Spring pom.xml配置:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
</dependencies>
Spring bean.xml的配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
//id 是自己定义的一个名字,相当于取一个别名 ,class是需要访问实现类的全限定类名
<bean id="daoService" class="com.Test.Dao.DaoServiceImpl"></bean>
<bean id="userService" class="com.Test.Service.UserServiceImpl"></bean>
</beans>
运行案例:
import com.Test.Dao.DaoService;
import com.Test.Service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
//daoService,userService就是之前bean.xml文件里的id
DaoService dao = (DaoService)context.getBean("daoService");
UserService user = (UserService)context.getBean("userService");
System.out.println(dao);
System.out.println(user);
}
}
Application Context 是 spring 中较高级的容器,它采用立即加载的策略。而BeanFactory是采用延迟加载的策略,但是也可以加载配置文件中定义的 bean,将所有的 bean 集中在一起,当有请求的时候分配 bean。ApplicationContext包含 BeanFactory所有的功能,一般情况下,相对于 BeanFactory,ApplicationContext会更加优秀。
ApplicationContext的三个实现类:
1.ClassXmlPathApplicationContext:加载类路径下的配置文件,不需要提供 XML 文件 的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从CLASSPATH 中搜索 bean 配置文件。
2.FileSystemXmlApplicationContext:加载磁盘任意路径下的配置文件。
3.AnnotationConfingApplictionContext:用于读取注解创建容器。
----相关参考见w3cschool文档