1、在application的启动类中默认的扫描路径是启动类的路径,要想自己的类能编译出来,需要放到同一路径或这个路径下,又或者用ComponentScan指定需要编译类的路径。
可以通debug 类org.springframework.context.annotation.ComponentScanAnnotationParser#parse 下的 basePackages查看真实路径
2、在spring中用注解@Service修饰类时,spring容器会自动帮我生成这个bean并放入到容器中,如果这个类没有写构造函数,就通过反射用默认的构造函数生成bean。如果有写带参数的构造函数,则根据构造函数生成bean实例,但是这个构造函数的入参也要求能在容器中找到,不然就会报错没有这个入参的bean(不管是对象还是基本数据类型)。我们可以先通过注入这个入参的bean到容器中,这样才不会报错。如果有2个或以上的构造函数,也是会报错的。因为spring不知道用那个构造函数,就会选择用默认的构造函数,但是因为你写了构造函数,所以这个类中就不存在默认的构造函数,就会报错找不到对应默认的构造函数。
3、当一个单例的bean,使用autowired注解标记其属性时,这个属性的属性值会被固定下来(每次请求都是的属性值地址都是一样的),如果你想要达到原型模式bean的效果就不能这样写,只能每次通过ApplicationContext 去获取属性值bean
以上是通过网友分享的知识内容做的简陋笔记!