10.4.4 处理用户竞价
当用户进行竞价时,系统不仅需要添加竞价记录,还需要向竞价用户发送通知邮件,通知该用户已经竞价成功。
下面是处理用户竞价的业务逻辑方法代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
public int addBid(int itemId, Bid bid, Integer userId) throws AuctionException { try { AuctionUser au = userDao.get(AuctionUser.class, userId); Item item = itemDao.get(Item.class, itemId); if (bid.getBidPrice() <= item.getMaxPrice()) { return -1; } item.setMaxPrice(bid.getBidPrice()); itemDao.save(item); bid.setBidItem(item); bid.setBidUser(au); bid.setBidDate(new Date()); bidDao.save(bid); SimpleMailMessage msg = new SimpleMailMessage(this.message); msg.setTo(au.getEmail()); msg.setText("Dear " + au.getUsername() + ", 谢谢你参与竞价,你的竞价的物品的是: " + item.getItemName()); mailSender.send(msg); return bid.getId(); } catch (Exception ex) { ex.printStackTrace(); log.debug(ex.getMessage()); throw new AuctionException("处理用户竞价出现异常,请重试"); } }
|
从该方法代码不难看出,方法的前半部分是添加竞价记录,并依赖于系统的DAO
组件提供实现;而后半部分发送通知邮件,发送通知邮件依赖于Spring
的邮件抽象层。
发送通知邮件在实际项目中是非常重要的事情,每当用户竞价成功后,系统可以发送通知邮件让用户确认,只有用户确认竞价后该竞价才会真正生效。
当使用Spring
邮件抽象层时,需要使用Spring
的如下两个工具类。
JavaMailSender
:用于发送邮件。
SimpleMailMessage
:表示邮件本身。
本系统并未发送MimeMessage
信息,所以使用SimpleMailMessage
已经足够。本系统把邮件的MailSender
和SimleMailMessage
都配置在Spring
容器中,因此必须在业务逻辑组件的代码中增加这两个组件的setter
方法。下面是在业务逻辑组件中依赖注入邮件MailSender
和SimleMailMessage
的setter
方法代码。
1 2 3 4 5 6 7 8 9
| public void setMailSender(MailSender mailSender) { this.mailSender = mailSender; } public void setMessage(SimpleMailMessage message) { this.message = message; }
|
当然,还应该在Spring
容器中配置如下两个关于邮件发送的Bean
。
mailSender
:配置Spring
发送邮件的MailSender Bean
。
mailMessage
:配置所发送的邮件本身。
下面是配置这两个邮件发送Bean
的配置片段。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" p:host="smtp.163.com" p:username="spring_test" p:password="123abc"> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.timeout">25000</prop> </props> </property> </bean>
<bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage" p:from="spring_test@163.com" p:subject="竞价通知" />
|
从以上代码可以看出,本系统使用163的电子邮件系统发送通知邮件,因此要求运行系统时服务器可以正常访问163的电子邮件系统,否则系统将抛出异常。当然,如果是一个企业级的应用,则应该改为使用本企业的邮件系统。
因为163的邮件系统要求先登录邮箱,然后才可发送邮件,故配置MailSender
时,指定了mail.smtp.auth
属性的值为true
,并提供登录邮箱所必需的用户名和密码。
提示:Spring
的邮件抽象层完全支持发送带附件、HTML
格式的邮件,如果需要发送这种”复杂”类型的邮件,则应该使用MimeMessage
信息,而不是SimpleMailMessage
信息。SimpleMailMessage
信息只支持普通文本内容。如果读者希望了解关于Spring
邮件抽象层的更多知识,则可以参考Spring
官方手册。