我正在尝试学习 groovy 并将其与现有的 Java jar 集成。Java 代码使用了 DI,但我似乎无法从我的 groovy 脚本中让它工作。
Java 应用程序包含一个使用 Mybatis 的数据访问层。该层由许多接口(例如 IUser)和控制器组成,例如
@Service
public class UserController implements IUser
控制器使用 Mybatis Mapper 类。
整个事情是使用 Spring 和 default-autowire="byName"> 组合在一起的
它设置为使用注释来访问控制器中的映射器。
Mybatis在Spring中配置扫描注入mapper
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.directski.data.mapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
因此,当我在 java 中运行我的应用程序时,一切正常。包括我调用的任何映射器
@Autowired
private UserMapper userMapper;
当我尝试将这个 jar 作为 groovy 脚本的一部分包含在内时,我开始遇到一些问题。我为 Spring 使用相同的 applicationContext 文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("controller-layer-applicationContext.xml");
当我作为脚本运行时,我可以从日志中看到组件被扫描。我的一些控制器包含一个被调用的@PostConstruct 方法,并且数据库查询成功执行。然而,当试图从我的脚本中调用我的控制器时,我得到了空指针错误。
我曾尝试使用@Autowired 在 groovy 中创建我的控制器,但它们似乎没有被注入。我还按照http://groovy.codehaus.org/Using+Spring+Factories+with+Groovy中的示例实现了 factory.registerBeanDefinition() 但这似乎确实可以创建我的控制器,但是我的 Mybatis Mappers控制器返回 null
如何确保我的控制器从 Groovy 正确自动连接?