1

我正在尝试学习 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 正确自动连接?

4

1 回答 1

0

好的,所以我有一些工作。取自答案 5如何以编程方式创建具有注入属性的 bean 定义?

public class AppContextExtendingBean implements ApplicationContextAware{


@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException{

    AutowireCapableBeanFactory beanFactory = applicationContext.getAutowireCapableBeanFactory();

    version1(beanFactory);

    }


    private void version1(AutowireCapableBeanFactory beanFactory){
    IUser userController= (UserController) beanFactory.createBean(UserController,AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true);
    beanFactory.initializeBean(userController, "user");

    User testuser = userController.getUser(3);


    }


}


ApplicationContext ctx = new ClassPathXmlApplicationContext("controller-layer-applicationContext.xml");

AppContextExtendingBean bean = new AppContextExtendingBean();

bean.setApplicationContext(ctx);
于 2013-07-11T15:19:12.820 回答