我试图了解Spring中的哪些类型的bean正在被代理,到目前为止,我理解了它的@Aspect,@Transactional注释类。因此,我在我的PC上玩了一下,并注意到如果我用@Component注释一个类,它不是在自动加载时得到代理,而是如果我只是将注释更改为@Repository,它就由CGLIB代理。据我所知,@Repository只是@Component的别名,为什么它会被代理,而另一个却没有?
下面是一个非常简单的例子
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
@Repository
public class JustForTest {
private final String hello = "";
public String getHello() {
return hello;
}
} 和
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
@Component
public class JustForTest {
private final String hello = "";
public String getHello() {
return hello;
}
}发布于 2021-07-23 14:25:20
为什么Spring需要代理bean类?基本的高级答案是:因为它需要在运行时向类添加额外的逻辑,所以您不必自己编写它(或者在冗长的XML描述符文件中配置.)。就像@Transactional注释向bean方法添加了神奇的事务管理一样,Repository注释还必须附加一些东西;您已经知道了这一点,因为一旦添加注释,bean就会被代理。
因此,要找到您的答案,只需研究Repository注释的用途。一个基本的搜索从一个有信誉的来源中引出了这篇文章,这就像我希望能够说的那样简单:
https://www.baeldung.com/spring-component-repository-service
我引述如下:
@Repository的工作是捕获特定于持久性的异常,并将它们作为Spring统一的未检查异常之一重新抛出。
读:这个功能是在运行时添加的。因此:代理。
https://stackoverflow.com/questions/68488261
复制相似问题