关于其他参数的足够解释由其他答案给出;但是,您要求提供一个真实的示例,以下示例阐明了不同传播选项的目的:假设您负责实施注册服务,在该服务中向用户发送确认电子邮件。您想到了两个服务对象,一个用于注册用户,另一个用于发送电子邮件,后者在第一个中被称为。例如这样的事情:/* Sign Up service */@Service@Transactional(Propagation=REQUIRED)class SignUpService{ ... void SignUp(User user){ ... emailService.sendMail(User); }}/* E-Mail Service */@Service@Transactional(Propagation=REQUIRES_NEW)class EmailService{ ... void sendMail(User user){ try{ ... // Trying to send the e-mail }catch( Exception) }}您可能已经注意到第二个服务的传播类型为REQUIRES_NEW,而且有可能引发异常(SMTP服务器关闭,电子邮件无效或其他原因)。您可能不希望整个过程回滚,例如从数据库或其他事物中删除用户信息;因此,您在单独的事务中调用第二个服务。回到我们的示例,这一次您担心数据库的安全性,因此您可以通过以下方式定义DAO类:/* User DAO */@Transactional(Propagation=MANDATORY)class UserDAO{ // some CRUD methods}这就意味着无论何时创建DAO对象,从而可能创建对db的访问,我们都需要确保从内部服务中进行调用,这意味着应该存在一个实时事务。否则将发生异常。因此,传播的类型为MANDATORY。