自动装配,无需组件扫描或设置/吸气器

时间:2015-04-12 05:39:21

标签: java spring spring-mvc

是否可以@Autowired字段

@Repository( "categoryDao" )
public class SomeDaoImpl implements SomeDao {
   @Autowired
   private SessionFactory sessionFactory;
   ...
}

不使用 setter / getter *组件扫描

我有一个配置

<bean id="categoryDao" class="com.example.dao.SomeDaoImpl">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    ...
</bean>

1 个答案:

答案 0 :(得分:0)

您可以使用构造函数注入,例如

@Repository( "categoryDao" )
public class SomeDaoImpl implements SomeDao {

   private SessionFactory sessionFactory;

   @Autowired
   public SomeDaoImpl(SessionFactory sessionFactory) {
     this.sessionFactory = sessionFactory;
   }
   ...
}

关于不同类型的注射有很好的讨论,有很多参考链接可用here

评论后

更新

现在您已经解释过了,您不应该在测试时更改代码。在您的情况下,您应该使用特定于测试的XML上下文,但将正在扫描的软件包减少到足够的

另一个方便的构造是在你的测试上下文xml中,你可以通过首先实例化它并使用context:exclude-filter属性重新定义一些注入的bean,对于模拟很有用,一个示例代码片段

<!--Mock object -->
<bean id="beanDAO" name="beanDAO" class="org.mockito.Mockito" factory-method="mock">
    <constructor-arg value="your.package.BeanDAO"/>
</bean>

<context:component-scan base-package="your.package">
    <context:exclude-filter type="regex" expression="your\.package\.Bean*"/>
</context:component-scan>