使用@Component注解类时,容易出现以下错误:org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'userserviceImpl' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:863)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1344
Process finished with exit code 1
我们都知道Spring会帮我们自动修改大小写,使得我们能够通过id找到该类
那究竟它的规律是什么呢?
Spring使用注解自动装配bean时 getBean()
寻找文件名规律:
-
类名首字母大写的 (如
UserServiceImpl
)
使用 首字母小写,其他不变 如(context.getBean("userServiceImpl")
) -
类名首字母是小写,其他是首字母大写的 如(
userServiceImpl
)
使用 原类名 如(context.getBean("userServiceImpl")
)
-
注意点:
若首字母大写的只需将首字母改为小写即可,其余单词照搬
扩展:
-
web开发,提供3个@Component注解衍生注解(功能一样)
- @Repository(“名称”):dao层
- @Service(“名称”):service层
- @Controller(“名称”):web层
-
@Autowired:自动根据类型注入
-
@Qualifier(“名称”):指定自动注入的id名称
-
@Resource(“名称”)
-
@PostConstruct 自定义初始化
-
@PreDestroy 自定义销毁
@autowire通过byType实现,而且必须要求这个对象存在
@resource默认通过byName实现,如果找不到,通过byType实现