@Service
public class AuthorityServiceImpl implements AuthorityService
{ private AuthorityDaoImpl authorityDaoImpl; public AuthorityDaoImpl getAuthorityDaoImpl()
{
return authorityDaoImpl;
}
@Resource
public void setAuthorityDaoImpl(AuthorityDaoImpl authorityDaoImpl)
{
this.authorityDaoImpl = authorityDaoImpl;
}
 如图所示,无论private AuthorityDaoImpl authorityDaoImpl;还是private AuthorityDao authorityDaoImpl;两种形式都是可以注入的。。只是第2种面向节接口有更好的扩展性(多态)。但是就不考虑扩展性直接写成第一种也应该没错。只是写死了。
  但是在ssh中的struts2中action中好像不是那么回事。
public class AuthorityAction extends ActionSupport
{ /**
 * 
 */
private static final long serialVersionUID = 1L; private AuthorityService authorityServiceImpl;
private List<Authority> authoritys; public List<Authority> getAuthoritys()
{
return authoritys;
} public void setAuthoritys(List<Authority> authoritys)
{
this.authoritys = authoritys;
}
private AuthorityService authorityServiceImpl;这里好像就是一定得父类接口的应用指向子类对象。
假如我换成public class AuthorityAction extends ActionSupport
{ /**
 * 
 */
private static final long serialVersionUID = 1L; private AuthorityServiceImpl authorityServiceImpl;
private List<Authority> authoritys; public List<Authority> getAuthoritys()
{
return authoritys;
} public void setAuthoritys(List<Authority> authoritys)
{
this.authoritys = authoritys;
} public AuthorityServiceImpl getAuthorityServiceImpl()
{
return authorityServiceImpl;
}
@Resource
public void setAuthorityServiceImpl(
AuthorityServiceImpl authorityServiceImpl)
{
this.authorityServiceImpl = authorityServiceImpl;
}
private AuthorityServiceImpl authorityServiceImpl;这样的话就出现问题了Unable to instantiate Action, authorityAction,  defined for 'authority' in namespace '/'Error creating bean with name 'authorityAction': Injection of resource methods failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'authorityServiceImpl' must be of type [com.xiaoke.service.impl.AuthorityServiceImpl], but was actually of type [$Proxy10]
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:319)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:400)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:194)大概意思就是说无法实例化这个action 什么注入失败的。所以在这里我就很大的疑问啦。。为什么啊在action中就是只能是]private AuthorityService authorityServiceImpl 却不能是]private AuthorityServiceImpl authorityServiceImpl 但是在servvice的实现层dao的实现层的注入却是两种方式都可以。。求真理。。希望有人能了却我心中疑问。

解决方案 »

  1.   

    interface UserDao
    class  UserDaoImplUserDao userDao=new UserDaoImpl();
      

  2.   

    你用spring的框架就要按照框架的套路来,你申明接口,spring根据bean的配置来实例化那个对象,你直接申明类了,那他就没办法根据bean来实例化了,
      

  3.   

    扯!!!如果你确定你的所有配置文件没有问题,那么需要在你声明接口的时候打上注解就好了
    @Autowried
    private AuthorityDao authorityDaoImpl;@Autowried
    private AuthorityService service;
    既然用了spring框架,你就不要再自己去实例化了。