autowired问题
1 2 3 4 | package com.imooc.spring.ioc.dao; public interface IUserDao { } |
1 2 3 4 5 6 7 8 9 10 | package com.imooc.spring.ioc.dao; import org.springframework.stereotype.Repository; // 组件类型注解默认为beanId首字母小写 @Repository public class UserDao implements IUserDao { public UserDao(){ System.out.println( "正在创建userDao" ); } } |
1 2 3 4 5 6 7 8 9 10 | package com.imooc.spring.ioc.dao; import org.springframework.stereotype.Repository; @Repository public class UserODao implements IUserDao{ public UserODao(){ System.out.println( "正在创建udao2" ); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package com.imooc.spring.ioc.service; import com.imooc.spring.ioc.dao.IUserDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { // 不再执行set方法,spring ioc 会通过反射技术将属性private修饰符自动改成public,直接进行赋值,不用在写setter/getter @Autowired private IUserDao userDao; // public IUserDao getUserDao() { return userDao; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | package com.imooc.spring.ioc; import com.imooc.spring.ioc.service.UserService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringApplicationContext { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); // String[] strs = context.getBeanDefinitionNames(); // for (String s:strs){ // System.out.println(s); // } String[] strs = context.getBeanDefinitionNames(); for (String s:strs){ System.out.println(s); } } } // 控制台输出 /Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=53694:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/jre/lib/rt.jar:/Users/gaoyulin/imooc/spring-ioc2/target/classes:/Users/gaoyulin/.m2/repository/org/springframework/spring-context/5.3.14/spring-context-5.3.14.jar:/Users/gaoyulin/.m2/repository/org/springframework/spring-aop/5.3.14/spring-aop-5.3.14.jar:/Users/gaoyulin/.m2/repository/org/springframework/spring-beans/5.3.14/spring-beans-5.3.14.jar:/Users/gaoyulin/.m2/repository/org/springframework/spring-core/5.3.14/spring-core-5.3.14.jar:/Users/gaoyulin/.m2/repository/org/springframework/spring-jcl/5.3.14/spring-jcl-5.3.14.jar:/Users/gaoyulin/.m2/repository/org/springframework/spring-expression/5.3.14/spring-expression-5.3.14.jar com.imooc.spring.ioc.SpringApplicationContext 正在创建userDao 正在创建udao2 userController userDao userODao userService stringUtils org.springframework.context.annotation.internalConfigurationAnnotationProcessor org.springframework.context.annotation.internalAutowiredAnnotationProcessor org.springframework.context.annotation.internalCommonAnnotationProcessor org.springframework.context.event.internalEventListenerProcessor org.springframework.context.event.internalEventListenerFactory Process finished with exit code 0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // pom.xml <? xml version = "1.0" encoding = "UTF-8" ?> < project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion >4.0.0</ modelVersion > < groupId >com.imooc</ groupId > < artifactId >spring-ioc2</ artifactId > < version >1.0-SNAPSHOT</ version > < properties > < maven.compiler.source >8</ maven.compiler.source > < maven.compiler.target >8</ maven.compiler.target > </ properties > < dependencies > < dependency > < groupId >org.springframework</ groupId > < artifactId >spring-context</ artifactId > < version >5.3.14</ version > </ dependency > </ dependencies > </ project > |
我这个代码使用autowired装配了之后没有报错呢,并且创建了两个bean,一个叫UserDao,一个叫UserODao,这是为什么呢?
21
收起
正在回答
1回答
同学你好,@Autowired默认是根据类型进行自动装配的,当存在多个满足条件的 Bean 时,则会根据名称进行注入。
同学代码中声明为:private IUserDao userDao,项目中存在两个该类型的Bean,则会继续按照名称进行注入,会直接将UserDao对象注入,故同学的程序可以正常运行。
课程中声明为private IUserDao uDao时,项目中存在两个IUserDao类型的Bean,且不存在名为uDao的bean故会注入失败,出现报错提示“No qualifying bean of type 'com.imooc.spring.ioc.dao.IUserDao' available:expected single matching bean but found 2: userDao,userOracleDao
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧