首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么@Repository注释被代理,而不是@Component

为什么@Repository注释被代理,而不是@Component
EN

Stack Overflow用户
提问于 2021-07-22 16:16:39
回答 1查看 92关注 0票数 0

我试图了解Spring中的哪些类型的bean正在被代理,到目前为止,我理解了它的@Aspect@Transactional注释类。因此,我在我的PC上玩了一下,并注意到如果我用@Component注释一个类,它不是在自动加载时得到代理,而是如果我只是将注释更改为@Repository,它就由CGLIB代理。据我所知,@Repository只是@Component的别名,为什么它会被代理,而另一个却没有?

下面是一个非常简单的例子

代码语言:javascript
复制
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

@Repository
public class JustForTest {

    private final String hello = "";

    public String getHello() {
        return hello;
    }   
} 

代码语言:javascript
复制
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

@Component
public class JustForTest {

    
    private final String hello = "";

    public String getHello() {
        return hello;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-23 14:25:20

为什么Spring需要代理bean类?基本的高级答案是:因为它需要在运行时向类添加额外的逻辑,所以您不必自己编写它(或者在冗长的XML描述符文件中配置.)。就像@Transactional注释向bean方法添加了神奇的事务管理一样,Repository注释还必须附加一些东西;您已经知道了这一点,因为一旦添加注释,bean就会被代理。

因此,要找到您的答案,只需研究Repository注释的用途。一个基本的搜索从一个有信誉的来源中引出了这篇文章,这就像我希望能够说的那样简单:

https://www.baeldung.com/spring-component-repository-service

我引述如下:

@Repository的工作是捕获特定于持久性的异常,并将它们作为Spring统一的未检查异常之一重新抛出。

读:这个功能是在运行时添加的。因此:代理。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68488261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档