我参与开发过的j2me项目里见到的DAO基本都是这样做的:
比如一个用户处理的会有一个IUserDAO.java接口和其实现类:UserDAOImpl.java
然后的业务层里都是通过spring注入的:
类里的声明:private IUserDAO userDAO;
spring配置:
        <bean id="userDAO" class="UserDAO">
<property name="jdbcTemplate">
<ref bean="jdbcTemplate"/>
</property>
</bean>

<bean id="userServ" class="UserServ">
<property name="userDAO">
<ref bean="userDAO"/>
</property>
</bean>请问这样做有什么好处呢,为什么不直接在调用的时候new一个呢,象这样:private UserDAOImpl userDAO = new UserDAOImpl(); 这两种方式有什么区别?

解决方案 »

  1.   

    这个不就是为什么要用spring么
      

  2.   

    Spring不就是面向接口的嘛
    你直接去new一个实现的实例那要Spring干嘛
      

  3.   

    这就是传说中的依赖注入啊!!我觉得最直接的好处就是注入的时候你不需要知道他的实现(配置文件已经配好了)。而且如果多个地方用了dao,需要改实现类时,你只需要改配置文件的一个地方,你直接new的话需要改多处。
      

  4.   

        这里还有个单实例和多实例的问题,如果我配置文件里声明成Singleton="true";那么这个bean是个单实例的,而new的花肯定是每次调用都生成一个新的对象了哇, 那这个单实例和多实例有各有什么好处呢?是不是多实例的就比较浪费资源`````^-
      

  5.   

    spring的依赖注入,你的bean实例全部交个spring容器来进行实例化,不在需要手工实例化,这样也降低的代码的耦合性。