为什么新建的entity和dao接口无法注入到webservice注入dao

匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。38198人阅读
&...&UserService]&found for dependency:&expected at least 1 bean which qualifies as autowire candidate for this dependency.&Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.
在Service层注入Dao接口时调了半天调不出,把我郁闷的,后来改用Dao接口实现类就好了。此时我恍然大悟,原理Dao接口实现类没有
实现Dao接口--implements,受不了,这种低级错误还犯&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1900222次
积分:14524
积分:14524
排名:第585名
原创:164篇
转载:34篇
译文:16篇
评论:257条
(2)(1)(6)(2)(4)(1)(11)(4)(2)(1)(1)(2)(2)(1)(4)(2)(2)(6)(1)(1)(1)(1)(6)(1)(1)(3)(2)(1)(2)(1)(3)(10)(3)(4)(3)(6)(3)(1)(2)(1)(5)(1)(1)(1)(4)(2)(1)(9)(3)(9)(17)(6)(9)(11)(1)(1)(8)(3)(8)(3)1395人阅读
java web(2)
Service层的接口中有一些比较常用方法,一次又一次的在新的Service层中被书写,所以懒惰的程序员又烦了,他们决定写个通用接口来解决这个问题。
有些项目中,实体类即承担接收表单数据的任务,又承担持久化任务,很省心。但有些项目中这两项任务的执行类不是同一个,一个Entity.java来执行数据
持久化的任务,一个EntityVo.java类来执行接收表单数据的任务。那么问题来了:Service层需要的是entityVo对象,而DAO层需要的是entity对象,这两个对象
会有一些相同的属性和方法,也会有一些不同的属性和方法,那么在service层中必然要做entityVo对象到entity对象的转换工作,而这项工作又不属于业务。如果
处理方法与业务混在一起写,代码的清晰度就会受到影响。所以本文中做了这方面的处理,可能并不是最好的方案,但起码比没有处理要好的多。
BaseService.java
package org.mon.base.
import java.util.L
public interface BaseService&EntityVo,PK& {
&& & * 增加
&& & * @param entityVo
&& &public void save(EntityVo entityVo);
&& & * 修改
&& & * @param entityVo
&& &public void update(EntityVo entityVo);
&& & * 通过主键删除
&& & * @param pk
&& &public void deleteByPK(PK pk);
&& & * 删除
&& & * @param entityVo
&& &public void delete(EntityVo entityVo);
&& & * 通过主键查询
&& & * @param pk
&& & * @return
&& &public EntityVo get(PK pk);
&& & * 查询全部
&& & * @return
&& &public List&EntityVo& findAll();
UserService.java
package org.lxl.mr.
import org.mon.base.service.BaseS
import org.lxl.mr.vo.UserVo;
public interface UserService extends BaseService&UserVo, String&{
这个处理非常简单,就是写个父接口,把常用的方法写在父接口中,子接口没有其他的需要就什么都不用写;有
其他的需要就再写相应的方法即可。
BaseServiceImpl.java
package org.mon.base.
import org.mon.base.vo.VoT
import org.springframework.beans.factory.annotation.A
public class BaseServiceImpl {
&& &private VoTemplate voT
&& &@Autowired
&& &public final void setVoTemplate(VoTemplate voTemplate) {
&& &&& &this.voTemplate = voT
&& &public final VoTemplate getVoTemplate(){
&& &&& &return this.voT
这个通用方法并不是用来自动实现BaseService接口中的方法的,而是处理entityVo和entity直接转化的问题的。
这是仿造HibernateDaoSupport的写法,注入voTemplate对象。其中voTemplate的get/set方法都是final修饰的,
是不允许子类重写的,保证了注入的正确执行。
VoTemplate.java
package org.mon.base.
import org.springframework.beans.BeanU
import org.
&* 本类的作用是解决service层传递的EntityVo对象与dao层
&* 使用的Entity对象转换的问题,更轻松,更规范的处理该问题
&* @author liuXueLiang
@Component
public class VoTemplate {
&& & * 由程序员自己提供一个回调方法
&& & * @param vo
&& & * @return
&& &public &T& T execute(VoCallback&T& vo){
&& &&& &return vo.doInVo();
&& & * 默认的回调方法,将v的属性值复制给t,并将t返回
&& & * @param t&& &回调对象
&& & * @param v&& &目标对象
&& & * @return
&& &public &T,V& T defaultExcute(final T t,final V v){
&& &&& &return this.execute(new VoCallback&T&(){
&& &&& &&& &
&& &&& &&& &@Override
&& &&& &&& &public T doInVo() {
&& &&& &&& &&& &if(v==null)
&& &&& &&& &&& &BeanUtils.copyProperties(v,t);
&& &&& &&& &&& &
&& &&& &&& &}
&& &&& &&& &
&& &&& &});
VoCallback.java
package org.mon.base.
public interface VoCallback&T& {
&& &T doInVo();
package org.lxl.mr.service.
import java.util.ArrayL
import java.util.L
import java.util.UUID;
import org.mon.base.service.BaseServiceI
import org.mon.base.vo.VoC
import org.lxl.mr.dao.UserD
import org.lxl.mr.pojo.U
import org.lxl.mr.service.UserS
import org.lxl.mr.vo.UserVo;
import org.springframework.beans.factory.annotation.A
import org.springframework.stereotype.S
public class UserServiceImpl extends BaseServiceImpl implements UserService {
&& &private UserDao userD
&& &@Autowired
&& &public void setUserDao(UserDao userDao) {
&& &&& &this.userDao = userD
&& & * 增加,方法一
&& &@Override
&& &public void save(UserVo entityVo) {
&& &&& &User user = new User();
&& &&& &user = super.getVoTemplate().defaultExcute(user, entityVo);
&& &&& &this.userDao.save(user);
&& & * 增加,方法二
//&& &@Override
//&& &public void save(final UserVo entityVo) {
//&& &&& &
//&& &&& &//这里是处理entityVo与entity转换的地方
//&& &&& &User user = super.getVoTemplate().execute(new VoCallback&User&(){
//&& &&& &&& &@Override
//&& &&& &&& &public User doInVo() {
//&& &&& &&& &&& &User u = new User();
//&& &&& &&& &&& &//这句根据主键生成策略决定要、不要、改
//&& &&& &&& &&& &u.setUuid(UUID.randomUUID().toString().replace(&-&, &&));
//&& &&& &&& &&& &u.setUsername(entityVo.getUsername());
//&& &&& &&& &&& &u.setPassword(entityVo.getPassword());
//&& &&& &&& &&& &
//&& &&& &&& &}
//&& &&& &&& &
//&& &&& &});
//&& &&& &
//&& &&& &//处理业务
//&& &&& &this.userDao.save(user);
&& & * 增加,方法三
//&& &@Override
//&& &public void save(UserVo entityVo) {
//&& &&& &//这里是处理entityVo与entity转换的地方
//&& &&& &User user = super.getVoTemplate().execute(new UserVoCallback(entityVo));
//&& &&& &//这里是处理业务的地方
//&& &&& &this.userDao.save(user);
&& & * 增加,方法四
//&& &@Override
//&& &public void save(UserVo entityVo) {
//&& &&& &//这里是处理entityVo与entity转换的地方
//&& &&& &User user = super.getVoTemplate().execute(new UserVoCallback2(entityVo));
//&& &&& &//这里是处理业务的地方
//&& &&& &this.userDao.save(user);
&& &@Override
&& &public void update(UserVo entityVo) {
&& &&& &User user = new User();
&& &&& &user = super.getVoTemplate().defaultExcute(user, entityVo);
&& &&& &this.userDao.update(user);
&& &public UserDao getUserDao() {
&& &&& &return userD
&& &@Override
&& &public void deleteByPK(String pk) {
&& &&& &this.userDao.deleteByPK(pk, UserVo.PK_NAME);
&& &@Override
&& &public void delete(UserVo entityVo) {
&& &&& &User user = new User();
&& &&& &user = super.getVoTemplate().defaultExcute(user, entityVo);
&& &&& &this.userDao.delete(user);
&& &@Override
&& &public UserVo get(String pk) {
&& &&& &User user = this.userDao.get(pk);
&& &&& &UserVo userVo = new UserVo();
&& &&& &userVo = super.getVoTemplate().defaultExcute(userVo,user);
&& &&& &return userVo;
&& &@Override
&& &public List&UserVo& findAll() {
&& &&& &List&User& list = this.userDao.findAll();
&& &&& &List&UserVo& listVo = new ArrayList&UserVo&();
&& &&& &if(list==null)
&& &&& &for(User user : list){
&& &&& &&& &UserVo userVo = new UserVo();
&& &&& &&& &userVo = super.getVoTemplate().defaultExcute(userVo, user);
&& &&& &&& &listVo.add(userVo);
&& &&& &return listVo;
上面的例子以save方法为例,给出了voTemplate处理entityVo与entity转化的4种用法。
使用voTemplate的defaultExcute方法,简单的从 v -& t 复制属性
使用voTemplate的excute方法,自定义处理方法。
方法2、3、4都是自定义处理方法,只不过在提供VoCallback&T&的实现类方式上有所差别。
这里是用内部类实现的
提供一个UserVoCallback.java,实现VoCallback接口。
以这个类的对象作为voTemplate.execute的参数来实现的。
UerVoCallback.java
package org.lxl.mr.vo.
import org.mon.base.vo.VoC
import org.lxl.mr.pojo.U
import org.lxl.mr.vo.UserVo;
public class UserVoCallback implements VoCallback&User& {
&& &private UserVo userVo;
&& &public UserVoCallback(UserVo userVo){
&& &&& &this.userVo = userVo;
&& &@Override
&& &public User doInVo() {
&& &&& &if(userVo==null)
&& &&& &User user = new User();
&& &&& &user.setUsername(userVo.getUsername());
&& &&& &user.setPassword(userVo.getPassword());
1) 提供一个VoCallback接口的抽象实现类VoCallbackSupport.java:
VoCallbackSupport.java
package org.mon.base.
public abstract class VoCallbackSupport&T,V& implements VoCallback&T& {
&& &protected V
&& &public VoCallbackSupport(V v){
&& &&& &this.v =
&& &@Override
&& &public abstract T doInVo();
2)提供一个UserVoCallback2.java,继承VoCallbackSupport抽象类。
以这个类的对象作为voTemplate.execute的参数来实现的。
UserVoCallback2.java
package org.lxl.mr.vo.
import org.mon.base.vo.VoCallbackS
import org.lxl.mr.pojo.U
import org.lxl.mr.vo.UserVo;
public class UserVoCallback2 extends VoCallbackSupport&User, UserVo&{
&& &public UserVoCallback2(UserVo v) {
&& &&& &super(v);
&& &@Override
&& &public User doInVo() {
&& &&& &User user = new User();
&& &&& &user.setUsername(v.getUsername());
&& &&& &user.setPassword(v.getPassword());
这种方式处理entityVo与entity之间转换与传统的方式一样,还是要程序员自己去处理。
它真正的好处是:
1、规范化处理entityVo与entity之间的转换
2、处理entityVo与entity之间转换的代码与业务代码分离,使代码更清晰
3、在entityVo与entity相似度极高,可以直接复制相同属性的情况下,使用VoTemplate
提供的defalutExcute方法一句话即可实现entityVo与entity的转换,如:
User user = super.getVoTemplate().defaultExcute(new User,entityVo);
非常的方便!
觉得我的这个方案可行的小伙伴不妨在项目中用用,有更好的想法记得告诉我,我们一起提高!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8740次
排名:千里之外<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 dto dao entity 的文章

 

随机推荐