Spring Boot初学:实体类上用@configuration和@component的影响

初学spring boot 做了一个自定义配置文件,定义实体类,控制层返回实体对象的简单例子,但是遇到了不能把实体对象返回的情况,后面百度,找了好久,终于解决,所以来记录一下。

首先自定义配置文件stu.properties

Spring Boot初学:实体类上用@configuration和@component的影响

然后创建对应的实体类StuBean

Spring Boot初学:实体类上用@configuration和@component的影响

最后在控制层注入,方法中返回

Spring Boot初学:实体类上用@configuration和@component的影响

运行结果

Spring Boot初学:实体类上用@configuration和@component的影响
这里非常顺利的显示了,但是重点是当类上用@configuration注解时,会出现什么情况呢?

修改实体类上的注解为@configuration

Spring Boot初学:实体类上用@configuration和@component的影响

这次debug一下,看下控制层中的实体对象

Spring Boot初学:实体类上用@configuration和@component的影响
可以看到我们明明只定义了4个属性,可是出现好多CGLIB开头的属性,这些是和spring的代理有关(具体的我也不清楚,欢迎小伙伴留言指点哈)

运行访问会发现报错了。。。。。

Spring Boot初学:实体类上用@configuration和@component的影响

控制台报这个序列化的错误

Spring Boot初学:实体类上用@configuration和@component的影响

解决

看了很多类似博客,都是重新new一个实体对象,重新设值,然后就可以返回成功了,好像是因为Spring容器在管理注入实体类的时候,创建的是代理类,所以debug的时候出现了CGLIB开头的代理属性,然后以json格式返回的时候就报错了,重新new的话,是为了规避这个代理类。
Spring Boot初学:实体类上用@configuration和@component的影响
返回成功了
Spring Boot初学:实体类上用@configuration和@component的影响

总结

我也刚认真学spring boot没几天,真的很想学好这门框架,希望看到的大佬可以留言分享一下学习方法,还有说错的地方,欢迎指正批评。