问题一:Autowired注解时报错,提示“Could not autowire. No beans of 'InfconfigDao' type found.”
解决办法:
@Autowired注入成员变量,前提是成员变量已被注入到spring容器中,注解的这个类InfconfigDao需要被Spring容器管理,需要在InfconfigDao加上@Component,把普通pojo实例化到spring容器中
问题二:启动项目一直无法注入
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.zgl.interfacetest.dao.InfconfigDao' available:
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound
解决办法:
SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!Application类是指SpringBoot项目入口类。
这个类的位置很关键: 如果Application类所在的包为:com.zgl.interfacetest,则只会扫描com.zgl.interfacetest包及其所有子包,如果dao、service所在包不在com.zgl.interfacetest及其子包下,则不会被扫描到。
在启动类中加
@ComponentScan(basePackages = "com.zgl.interfacetest.dao")
- @controller 控制器(注入服务)
用于标注控制层,相当于struts中的action层 - @service 服务(注入dao)
用于标注服务层,主要用来进行业务的逻辑处理 - @repository(实现dao访问)
用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件 - @component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
)泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。