对接微信支付时需要自己写PayService接口,没有多想写接口的时候就在接口上加了@Service实现类,结果报错如下,提示该接口的实现类未注入到bean中,显然servie注解加错位置了。
2.详细说明先来回顾一下刚开始学习spring的时候,利用xml方式将类托管给 spring的bean容器。
2.1 先建立一个类,如下Person类
package com.xu.pojo;
public class Person {
private String name;
private Dog dog;
private Cat cat;
void eat(){
System.out.println("吃");
}
}
2.2 编写application.xml文件
此时Person类已经交给了bean容器管理。
2.3 从容器中获取类(类似于注解中的@Autowired)
public class Test {
public static void main(String[] args) {
// 因为我们是用XML装配的bean,需要通过工厂获得类。
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 从容器中获取bean
Person person = context.getBean("person", Person.class);
person.eat();
}
}
可以看出getBean会返回的是一个person类,这里的操作也就相当于
Pereson person = new Person();
显然,通过xml的详细步骤我们可以看出注入容器中的是一个类。
3.@Service注解因为@Service是将一个类自动注入到spring容器中,通过xml方式我们可以看出getBean中拿到的是类,也就是类的实例化,接口是没有办法实例化的,只有实现类是可以进行实例化的,而所以是加在实现类上的。
4.@Autowired写接口名还是实现类的名字?该注解类似于new,但是使用了多态中的向上转型,父类的对象指向了子类的引用,即创建了一个接口对象,但这个对象指向实现类。



