Spring-常见错误50例 让一些错综复杂的开发工作变得简单

Spring-常见错误50例 让一些错综复杂的开发工作变得简单

一、Spring Bean定义常见错误

一.隐式扫描不到 Bean :@ComponentScan默认扫描范围

从启动类所在包开始,扫描当前包及其子级包下的所有文件。

@ComponentScan的使用位置为SpringBoot的启动类上,可以不加,不加的默认位置就是扫描当前包及其子级包下的所有文件。

如果需要扫描其他位置的,需要手动去指定,手动指定后,默认的范围就失效了。

@ComponentScan("com.testing")

public class Application {

    public static void main(String[] args) {

        new SpringApplicationBuilder().sources(Application.class).web(WebApplicationType.NONE).run(args);

    }

}

1

2

3

4

5

6

二.定义的 Bean 缺少隐式依赖:无法将带参构造器加入容器

我们把一个类定义成 Bean,同时又觉得这个 Bean 的定义除了加了一些 Spring 注解外,并没有什么不同。所以在后续使用时,有时候我们会不假思索地去随意定义它,例如我们会写出下面这样的代码:

@Service

public class ServiceImpl {

    private String serviceName;

    public ServiceImpl(String serviceName){

        this.serviceName = serviceName;

    }

}

1

2

3

4

5

6

7

8

9

10

报这个错误:

Parameter 0 of constructor in com.spring.puzzle.class1.example2.ServiceImpl required a bean of type 'java.lang.String' that could not be found.

1

1、问题原因

定义一个类为 Bean,如果再显式定义了构造器,那么这个 Bean 在构建时,会自动根据构造器参数定义寻找对应的 Bean,然后反射创建出这个 Bean。

作为BEAN对象,需要创建实例,在创建实例的时候,会调用构造器,这里的构造器只有一个带参构造器,但是这个参数谁也不知道。

2、处理方法

是因为无法找到这个入参,所以才会报错,那么我们把这个入参作为一个BEAN对象交给容器就可以了。

声明一个CONFIG类,将该对象交给BEAN容器

@Configuration

public class configdemo {

    @Bean

    public String servicename() {

        return "test";

    }

}

1

2

3

4

5

6

7

三.原型 Bean 被固定:设置为多例,但是访问仍然是单例

即使将ServiceImpl 设置为多例,但是无论怎么访问依然是单例。

@Service

@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

public class ServiceImpl {

}

1

2

3

4

@RestController

public class controllerdemo {

    @Autowired

    private serviceimpldemo serviceImpl;

    @GetMapping("/hi}")

    @ResponseBody

    public String hi() {

        return "helloworld, service is : " + serviceImpl;

    }

}

1

2

3

4

5

6

7

8

9

10

11

1、问题原因

————————————————

版权声明:本文为CSDN博主「如我般骄傲」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_38173650/article/details/115947123

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 1 数据交换格式 2 Java反射 3 Spring简介 4 Spring IOC 5 代理 6...
    小小千千阅读 2,990评论 1 0
  • 2.1 Spring配置的可选方案 Spring提供了三种主要的装配机制: 1)在XML中进行显示配置。2)在ja...
    如一诺然阅读 3,392评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,404评论 19 139
  • Spring作为Java的王牌开源项目,相信大家都用过,但是可能大家仅仅用到了Spring最常用的功能,Sprin...
    Java耕耘者阅读 2,720评论 0 1
  • 装配Spring Bean 目标: 掌握3种依赖注入的方式 掌握如何使用XML装配Bean 掌握如何使用注解方式装...
    哈哈啊_07e8阅读 1,326评论 0 0