Spring中的Bean都是代理Bean?

并非所有的 Bean 都会被声明为需要代理,只有被特定的 AOP 切面所切入的 Bean 才会生成 AOP 代理对象。其他非代理的Bean 仍然会作为原始对象被实例化和注入。因此,虽然 Spring 加载的对象确实大部分是通过代理方式生成的AOP 代理对象,但仍然存在一部分对象是原始对象。

例子说明

假设我们有两个 Bean ,分别是 UserService OrderService 。其中, UserService 需要被 AOP 代理,以实现事务管理的功能,而OrderService 不需要被代理。
Spring 的配置中,我们可以通过对 UserService 添加 @Transactional 注解来标明该 Bean 需要生成 AOP代理对象。而对于OrderService ,则不需要做任何特殊的标记,它会作为原始对象被实例化和注入。
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public void addUser(User user) {
userDao.addUser(user);
}
// other methods...
}
@Service
public class OrderService {
@Autowired
private OrderDao orderDao;
public void addOrder(Order order) {
orderDao.addOrder(order);
}
// other methods...
}
在上述代码中, UserService 被标记为 @Service 注解,并且其中的 addUser 方法被标记为@Transactional注解,表示该方法需要被事务管理。因此, Spring 会为 UserService 生成一个 AOP 代理对象,并在Bean 初始化时将该代理对象注入到其他需要 UserService 依赖的 Bean 中。而OrderService 则没有任何特殊的注解标记,因此 Spring 会将其作为原始对象进行实例化和注入。
  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值