我们都知道java是面向对象的语言;
一个人是一个对象一个物品也是一个对象;
在刚刚接触Spring的时候只知道用Spring来管理咱们的一个个对象,一直知道Spring 提倡的面向接口的编程方式,经过很久的使用,终于能一窥其中的奥秘;
首先来看
假设一个中国人那么他有eat() 方法也有say()方法
一个日本人那么他也有eat()方法 也有say()方法
如果刚开始没发现有日本人,那么肯定只会写一个中国的方法;
public static void ChinaPesonImpinit(ApplicationContext context)
{
ChinaPesonImp ChinaPesonImp = context.getBean(ChinaPesonImp.class);
ChinaPesonImp.eat();
ChinaPesonImp.Say();
}
程序运行也是很OK;
有天发现有日本人了,那么突然发现中国人的方法不能用了要重新写一个日本人的方法
public static void JapanPesonImpinit(ApplicationContext context)
{
JapanPesonImp JapanPesonImp = context.getBean(JapanPesonImp.class);
JapanPesonImp.eat();
JapanPesonImp.Say();
}
那么以此类推美国人 英国人。...好多方法 来一个人就要增加一个方法
那么Spring 如何解决的呢?
首先既然他们都有相同的方法那么新建一个接口PersonInterface
public interface PersonDao {
public String Say();
public String eat();
}
那么理所当然ChinaPesonImp 需要实现这个接口
@Component
public class ChinaPesonImp implements PersonInterface {
@Resource(name="PersonServiceimp")
com.xj.Interface.PesonServiceInterface PesonServiceInterface;
@Override
public void Say() {
System.out.println(PesonServiceInterface.Say());
}
@Override
public void eat() {
System.out.println(PesonServiceInterface.eat());
}
}
那么理所当然JapanPesonImp也需要实现这个接口
@Component
public class JapanPesonImp implements PersonInterface {
@Resource(name="PersonServiceimpto")
com.xj.Interface.PesonServiceInterface PesonServiceInterface;
@Override
public void Say() {
System.out.println(PesonServiceInterface.Say());
}
@Override
public void eat() {
System.out.println(PesonServiceInterface.eat());
}
}
那么现在我们可以不关注是哪国人来了,只要你实现了接口我们认为你就是人咱一个方法就搞定了;
public static void init(ApplicationContext context,Class classname)
{
@SuppressWarnings("unchecked")
PersonInterface PersonInterface = context.getBean(classname);
PersonInterface.eat();
PersonInterface.Say();
}
那么这个时候新来的英国人怎么办;
那就实现PersonInterface接口, 再将这个实现的实例传入Init方法中一个方法就搞定了;
public static void main( String[] args )
{
ApplicationContext context = new AnnotationConfigApplicationContext(SpringRunStartConfig.class);
init(context,ChinaPesonImp.class);
init(context,JapanPesonImp.class);
}
其实在现实生活中假设你要跟某个公司沟通一个具体的工作事项,你想想你先找谁?
正常的流程;对面公司的对接人(接口),对接人将具体负责这块的人(接口实现类)的结果,然后反馈给你;
那么以后有问题你就找对接人,不需要找负责这块的某个人员。
那么这个人以后离职或者不上班你都不用管,由对接人全权负责。
------------------------------------------------------
如果你直接找对方接口人负责人就会发生不可控因素;
1、今天是他明天可能是她;傻傻你分不清楚
2、你今天依赖他,明天他走了你又要依赖别人。好费心