java - 如何从 Groovy Spring 注入(inject)我的 Controller 层

标签 java spring groovy mybatis

我正在尝试学习 groovy 并将其与现有的 Java jar 集成。 java代码使用了DI,但我似乎无法让它从我的groovy脚本中工作。

Java 应用程序包含使用 Mybatis 的数据访问层。该层由许多接口(interface)(例如 IUser)和 Controller 组成 例如

@Service
public class UserController implements IUser

Controller 使用 Mybatis Mapper 类。

整个事情是使用 Spring 和 default-autowire="byName"> 组合在一起的

它设置为使用注释来访问 Controller 内的映射器。

Mybatis在Spring中配置为扫描并注入(inject)映射器

<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 作为常规脚本的一部分包含时,我开始遇到一些问题。我对 Spring 使用相同的 applicationContext 文件

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

当我作为脚本运行时,我可以从日志中看到组件已被扫描。我的一些 Controller 包含一个被调用的 @PostConstruct 方法,并且数据库查询被成功执行。但是,当尝试从脚本调用我的 Controller 时,我收到空指针错误。

我尝试使用 @Autowired 在 groovy 中创建我的 Controller ,但它们似乎没有被注入(inject)。我还按照http://groovy.codehaus.org/Using+Spring+Factories+with+Groovy中的示例实现了factory.registerBeanDefinition() 然而,这似乎确实让我的 Controller 被创建,但我的 Controller 中的 Mybatis 映射器返回 null

我如何确保我的 Controller 能够从 Groovy 正确自动连接?

最佳答案

好的,所以我有一些可以工作的东西。摘自答案 5 How to programmatically create bean definition with injected properties?

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);

关于java - 如何从 Groovy Spring 注入(inject)我的 Controller 层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17588810/

相关文章:

java - (如何)我可以用 Java 泛型做到这一点吗?

java - 在新窗口或选项卡中打开链接

java - 层次关系的图遍历

java - 带有 MongoDB POST 和 GET 记录的 Spring Controller

java - 使用 JPA 和 hibernate 加入可选列

java - Controller 中所有方法的 Spring AOP 切入点

java - 使用 Atomikos 在 Tomcat 服务器中正确设置 JTA 事务管理器

grails - 如何从 Groovy 中的 List<List> 中提取列表

jenkins - 如何测试 Jenkins 插件是否安装在 Pipeline DSL (Groovy)

grails - 将选定的单选按钮值传递给Groovy Controller