用jprofiler查看我的web项目
看到这样一幅图,此图是在应用刚刚启动时截取的
让人不解的是:为什么刚启动完spring中居然有10多个实例
看前几行:
SiteDynamicManager$$EnhancerByCGlib 23
SiteDynamicManager$$FastClassByCGlib 19
....
http://xuliangyong.iteye.com/upload/attachment/130623/bff9e8ed-9539-30d4-aaee-593de817fdd3.png
而其他的Dao对象则正常 只存在一个实例
难道是使用@Transctional的原因?
再来一张
这张图也十分的有趣,都是MessageManager类衍生出来的
MessageManager的代码见附录1
spring中配置也只有一行
<bean id="messageManager" class="com.justel.sns.service.MessageManager" />
http://xuliangyong.iteye.com/upload/attachment/130637/a6fd217b-96a9-3f25-8c0e-df91b99129ff.png
附录
public class MessageManager { private MessageDao messageDao; private UserDao userDao; @Transactional public void send(Message msg) throws UserNotExistException{ User receiver = userDao.findByNickname(msg.getReceiverName()); if(receiver == null&&msg.getReceiver()!=null){ receiver = userDao.get(msg.getReceiver().getId()); } if(receiver == null){ throw new UserNotExistException(); } msg.setReceiver(receiver); messageDao.save(msg); } @Transactional public void save(Message msg){ this.messageDao.save(msg); } /** * 发件箱 */ @Transactional(readOnly=true) public Iterator<Message> findSentMessage(Integer id, int maxResults){ return messageDao.findSentMessage(id, maxResults); } /** * 发件箱,分页显示 */ @Transactional(readOnly=true) public Page<Message> findSentMessage(int pageNo, int pageSize){ return messageDao.findSentMessage(pageNo, pageSize); } /** * 收件箱 */ @Transactional(readOnly=true) public Page<Message> inbox(int pageNo, int pageSize){ return messageDao.findReceivedMessage(pageNo, pageSize); } /** * 查看邮件。收件人 * @param id * @return */ @Transactional public Message view(Integer id){ Message message = messageDao.load(id); boolean isViewMyself = SecurityContextHolder.getId().equals(message.getSender().getId()); //自己查看自己的邮件 boolean isSendToMyself = message.getReceiver().getId() == message.getSender().getId(); //自己发给自己的邮件 if(isSendToMyself || !isViewMyself ){ if( !message.isRead() ){ message.setRead(true); save(message); } } return message; } /** * 删除收件箱邮件 * @param id */ @Transactional public void inboxDelete(Integer id){ Message msg = messageDao.get(id); if(msg.getReceiver().getId().intValue() == SecurityContextHolder.getId().intValue()){ msg.setReceiverDelete(true); messageDao.save(msg); } } /** * 批量删除收件箱邮件 */ @Transactional public void inboxBatchDel(List<Integer> listId){ for(Integer id:listId){ Message msg = messageDao.get(id); if(msg.getReceiver().getId().intValue() == SecurityContextHolder.getId().intValue()){ msg.setReceiverDelete(true) ; messageDao.save(msg); } } } /** * 删除发件箱邮件 * @param id 邮件id */ @Transactional public void outboxDelete(Integer id){ Message msg = messageDao.get(id); if(msg.getSender().getId().intValue() == SecurityContextHolder.getId().intValue()){ msg.setSenderDelete(true); messageDao.save(msg); } } /** * 批量删除发件箱邮件 */ @Transactional public void outboxBatchDel(List<Integer> listId){ for(Integer id:listId){ Message msg = messageDao.get(id); if(msg.getSender().getId().intValue() == SecurityContextHolder.getId().intValue()){ msg.setSenderDelete(true); messageDao.save(msg); } } } /** * 获取未读邮件数 */ @Transactional(readOnly=true) public long countUnreadMessage(Integer userId){ return messageDao.findUnreadMessage(userId); } public Message get(Integer id){ return messageDao.get(id); } public void setMessageDao(MessageDao messageDao) { this.messageDao = messageDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } }
1 楼
east_java
2010-11-21
这什么原因呢