代码之家  ›  专栏  ›  技术社区  ›  Rakesh Goyal

Spring注射依赖

  •  0
  • Rakesh Goyal  · 技术社区  · 14 年前

    我们有两个班,PhysicalService和PhysicalDAO。物理服务实例是使用某个服务处理程序动态创建的,因此它不是spring管理的bean。物理DAO实例由springbean管理。有什么方法可以在物理服务中注入物理dao吗?

    3 回复  |  直到 14 年前
        1
  •  1
  •   meriton    14 年前

    或者,您可以使用lookup injection将原型服务bean注入到处理程序中,从而在处理程序中有效地提供一个工厂方法,请求spring实例化服务。

    也就是说,我想知道你为什么需要一个服务处理程序?您确定不能使用spring创建服务吗?

    编辑:如果您可以删除属性文件,我会将所有服务转换为SpringBean,其id与提供给处理程序的id匹配,将应用程序上下文注入到服务处理程序中,然后执行以下操作:

    public Object getInstance(String id) {
        return applicationContext.getBean(id);
    }
    

    为了迁移属性文件springbean定义,我将使用正则表达式替换。

        2
  •  0
  •   Adi Sembiring    14 年前

    首先必须将PhysicalDAO注入工厂,您可以在spring上下文中或使用autowired注释来定义它。

    //spring-context.xml
    <bean id="physicalDAO" class="package.dao.PhysicalDAO">
    //inject reference needed by dao class
    </bean>
    
    <bean id="physicalServiceFactory" class="package.service.PhysicalServiceFactory">
            <property name="physicalDAO" ref="physicalDAO " ></property>
    </bean>
    

    在factory类中,您可以编写如下代码:

    PhysicalServiceFactory {
        private PhysicalDAO physicalDAO;
    
        public void setPhysicalDAO(PhysicalDAO _physicalDAO) {
            physicalDAO = _physicalDAO;
        }
    
        public PhysicalService create(String id) {
            PhysicalService ps = PhysicalService(id);
            ps.setPhysicalDAO(physicalDAO);
                return ps;
        }
    }
    
        3
  •  0
  •   Tamiliniyan Devarajan    7 年前

    //Add this spring annotation to add your DAO class to Spring container
    @Component("physicalDAO")
    public class PhysicalDAO {
    
    }
    
    //Add Service class with PhysicalDAO object reference to use.
    public class PhysicalService {
    
      @Autowired
      PhysicalDAO physicalDAO;
    
    }
    

    为spring配置文件定义以下条目。

    <context:annotation-config></context:annotation-config>
    <context:component-scan base-package="com.cognizant.aop.annotation"></context:component-scan>