理解Spring面向接口编程思想

我们都知道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、你今天依赖他,明天他走了你又要依赖别人。好费心

 

你可能感兴趣的:(Spring,Interface)