新手,spring mvc使用注解方式,为什么实体bean需要在程序中new一下,而dao层的就是注入一下,不需要new了
新手求救,spring mvc使用注解方式,为什么实体bean需要在程序中new一下,而dao层的就是注入一下,不需要new了
例如
@Service
@Transactional(readOnly=true)
public class CMSService {
@Resource
protected MemCachedClient cacheClient;
@Autowired
private CMSDao cmsDao;
public List<CMSNews> getAllCMSNews(){
String hql = "FROM CMSNews ORDER BY pubDate DESC ";
return cmsDao.getCMSNewsList(hql,new CMSNews());
}
public List<CMSNews> getCMSNewsListByPersonId(Long personId){
CMSNews cmsNews = new CMSNews();
cmsNews.setPersonId(personId);
String hql = "FROM CMSNews WHERE personId = :personId ORDER BY pubDate DESC ";
return cmsDao.getCMSNewsList(hql,cmsNews);
}
public List<CMSNews> getCMSNewsListByTitlePersonId(String title, Long personId){
CMSNews cmsNews = new CMSNews();
cmsNews.setTitle(title);
cmsNews.setPersonId(personId);
String hql = "FROM CMSNews WHERE title = :title AND personId = :personId ";
return cmsDao.getCMSNewsList(hql,cmsNews);
}
@Transactional(propagation=Propagation.REQUIRED)
// @CacheEvict(value="memCached", key="T(cn.people.dfzlk.constants.CacheKey).FIRST_PAGE_NEWS")
@InvalidateAssignCache(namespace = CacheKey.FIRST_PAGE_NEWS, assignedKey="news")
public int addCms(CMSNews cn){
String hql = "FROM CMSNews WHERE title = :title AND personId = :personId AND reportId = :reportId ";
List<CMSNews> list = cmsDao.getCMSNewsList(hql, cn);
if(list.isEmpty() && null != cmsDao.addNew(cn)){
//cacheClient.delete(CacheKey.FIRST_PAGE_NEWS);
return 1;
}else{
return 0;
}
}
@ReadThroughSingleCache(namespace = CacheKey.PERSON_NEWS, expiration = 6 * 60 * 60)
public List<CMSNews> getCMSNewsListByPidCount(@ParameterValueKeyProvider Long personId, int first, int max){
CMSNews cmsNews = new CMSNews();
cmsNews.setPersonId(personId);
String hql = "FROM CMSNews WHERE personId = :personId ORDER BY pubDate DESC";
return cmsDao.getCMSNewsList(hql,cmsNews,first,max);
}
------解决思路----------------------
因为DAO层一般无状态。而实体bean要保持状态信息,或者说不同请求内容可能是不一样的,所以要用不同的实例。
------解决思路----------------------
dao层可以讲是结构,只是加工处理数据的,bean是存放数据的地方,假设每个用户都登录系统,不可能只有一个bean,A有A的用户名密码,B有B的,只用一个bean不new的话,到底谁是谁
------解决思路----------------------
其实1楼正解,dao无状态,可以注入的方式。bean是有状态的,尽量不要注入,不过你非要注入的话也可以,设为prototype。但是那样的话你自己都会感觉特别乱的
例如
@Service
@Transactional(readOnly=true)
public class CMSService {
@Resource
protected MemCachedClient cacheClient;
@Autowired
private CMSDao cmsDao;
public List<CMSNews> getAllCMSNews(){
String hql = "FROM CMSNews ORDER BY pubDate DESC ";
return cmsDao.getCMSNewsList(hql,new CMSNews());
}
public List<CMSNews> getCMSNewsListByPersonId(Long personId){
CMSNews cmsNews = new CMSNews();
cmsNews.setPersonId(personId);
String hql = "FROM CMSNews WHERE personId = :personId ORDER BY pubDate DESC ";
return cmsDao.getCMSNewsList(hql,cmsNews);
}
public List<CMSNews> getCMSNewsListByTitlePersonId(String title, Long personId){
CMSNews cmsNews = new CMSNews();
cmsNews.setTitle(title);
cmsNews.setPersonId(personId);
String hql = "FROM CMSNews WHERE title = :title AND personId = :personId ";
return cmsDao.getCMSNewsList(hql,cmsNews);
}
@Transactional(propagation=Propagation.REQUIRED)
// @CacheEvict(value="memCached", key="T(cn.people.dfzlk.constants.CacheKey).FIRST_PAGE_NEWS")
@InvalidateAssignCache(namespace = CacheKey.FIRST_PAGE_NEWS, assignedKey="news")
public int addCms(CMSNews cn){
String hql = "FROM CMSNews WHERE title = :title AND personId = :personId AND reportId = :reportId ";
List<CMSNews> list = cmsDao.getCMSNewsList(hql, cn);
if(list.isEmpty() && null != cmsDao.addNew(cn)){
//cacheClient.delete(CacheKey.FIRST_PAGE_NEWS);
return 1;
}else{
return 0;
}
}
@ReadThroughSingleCache(namespace = CacheKey.PERSON_NEWS, expiration = 6 * 60 * 60)
public List<CMSNews> getCMSNewsListByPidCount(@ParameterValueKeyProvider Long personId, int first, int max){
CMSNews cmsNews = new CMSNews();
cmsNews.setPersonId(personId);
String hql = "FROM CMSNews WHERE personId = :personId ORDER BY pubDate DESC";
return cmsDao.getCMSNewsList(hql,cmsNews,first,max);
}
------解决思路----------------------
因为DAO层一般无状态。而实体bean要保持状态信息,或者说不同请求内容可能是不一样的,所以要用不同的实例。
------解决思路----------------------
dao层可以讲是结构,只是加工处理数据的,bean是存放数据的地方,假设每个用户都登录系统,不可能只有一个bean,A有A的用户名密码,B有B的,只用一个bean不new的话,到底谁是谁
------解决思路----------------------
其实1楼正解,dao无状态,可以注入的方式。bean是有状态的,尽量不要注入,不过你非要注入的话也可以,设为prototype。但是那样的话你自己都会感觉特别乱的