GVKun编程网logo

Java WAR-从外部JAR加载Spring Bean(springboot加载外部jar)

28

本篇文章给大家谈谈JavaWAR-从外部JAR加载SpringBean,以及springboot加载外部jar的知识点,同时本文还将给你拓展@Autowire从外部jar创建的springbean?、

本篇文章给大家谈谈Java WAR-从外部JAR加载Spring Bean,以及springboot加载外部jar的知识点,同时本文还将给你拓展@Autowire从外部jar创建的spring bean?、GWT – 从外部javascript调用实例方法、java – android外部jar问题、java – Jax-ws,spring和SpringBeanAutowiringSupport等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java WAR-从外部JAR加载Spring Bean(springboot加载外部jar)

Java WAR-从外部JAR加载Spring Bean(springboot加载外部jar)

我想在我的Spring MVC Web应用程序(打包为WAR)中加载一些Spring框架bean @Service ,这些bean 由外部jar
注释,该jar负责访问数据库并 位于 / WEB-INF / lib下 的类路径中 。如果可能的话,希望使用
@Autowired 注释自动加载它们。

我已经成功地遵循了这个link1中的解决方案:

this.ctx = new ClassPathXmlApplicationContext("services-context.xml");this.myAService = ctx.getBean("myAService");

但是,此解决方案使用Spring API函数 getBean,这被认为是不好的做法。

我还尝试了两件事来加载外部jar的applicationContext:

  • WAR的appContext.xml:

    <import resource="classpath*:/WEB-INF/lib/pathToExternalJar/applicationContext.xml">
  • WAR的Web xml->加载jar的appContext,如此处所述(link3)。(例如* applicationContext.xml):

        <context-param>    <param-name>contextConfigLocation</param-name>    <param-value>        classpath:localSpringContext.xml        classpath:*applicationContext.xml    </param-value></context-param>

正确加载这些bean的最佳方法是什么,应该如何做?

答案1

小编典典

WAR的appContext.xml和WAR的Webxml都是可行的。如果需要同时基于localSpringContext.xml和外部jar的applicationContext.xml运行集成测试,则建议使用WAR的appContext.xml方法。

更新1:

WAR的appContext.xml:

<import resource="classpath:{classpath}/applicationContext.xml"/>

WAR的Web xml:

<context-param>    <param-name>contextConfigLocation</param-name>    <param-value>        classpath:localSpringContext.xml        classpath:{classpath}/applicationContext.xml</param-value></context-param>

例如,如果您的applicationContext.xml在软件包:com / gmail / hippoom下

您可以通过带通配符的classpath:com / gmail / hippoom / applicationContext.xml或classpath
*:applicationContext.xml来获取。

@Autowire从外部jar创建的spring bean?

@Autowire从外部jar创建的spring bean?

我有一个已创建的模块/ jar,正在用作util 库。我在那里创建了一个服务,如下所示:

@Servicepublic class PermissionsService { ... }

…它位于以下包中的位置:com.inin.architect.permissions和我的主应用程序中,我正在引用/加载此jar(即,设置为该应用程序的Maven POM.xml文件中的依赖项),例如所以:

<dependency>        <groupId>com.inin.architect</groupId>        <artifactId>permissions</artifactId>        <version>1.0-SNAPSHOT</version>    </dependency>

在应用程序中,我想使用该服务,例如:

@AutowiredPermissionsService permissions

在应用程序的spring设置中,我得到了以下信息:

@Configuration@EnableWebMvc@ComponentScan(basePackages = { "com.inin.generator", "com.inin.architect.permissions" })public class WebConfig extends WebMvcConfigurerAdapter implements ServletContextAware { }

但是,当我在tomcat下运行我的应用程序时,它抱怨没有PermissionsService的bean :“ org.springframework.beans.factory.NoSuchBeanDefinitionException:没有合格的bean类型……”

那么,如何将bean从lib引入到我的应用程序中呢?当然有办法。你是否必须将库设置为完整的Spring MVC应用程序,这样才能正常工作?即你是否也必须在lib中安装@Configuration和@ComponentScan?

答案1

小编典典

你必须至少扫描包含要注入的类的软件包。例如,使用Spring 4注释:

@Configuration@ComponentScan("com.package.where.my.class.is")class Config {...}

这与XML配置的原理相同。

GWT – 从外部javascript调用实例方法

GWT – 从外部javascript调用实例方法

我们可以在GWT中使用这个$entry方法来允许外部 javascript执行java方法.
您可以在其文档 https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI?hl=fr#calling中看到解释

但是,这个例子只有静态方法.我正在尝试用非静态方法编写它,当我尝试调用它时,我得到一个异常:

java.lang.classCastException: Cannot cast com.google.gwt.core.client.JavaScriptObject$to mypackage.MyModule

这是我的代码:

public native void setRefreshModuleCallback() /*-{
    $wnd.refreshModule = $entry(function() {
        this.@mypackage.MyModule::refreshModuleJava();
        alert('test');
    });
}-*/;

public void refreshModuleJava() {
    logger.log(Level.WARNING,"REFRESH");
}

我觉得非常有趣的是调用了警报,我在浏览器中看到了结果,但是之前的调用没有被执行.

你知道它是否真的可以做这样的事情?

解决方法

$entry不是关于调用java,而是关于确保GWT中的一些事情顺利进行:异常被路由到GWT.UncaughtExceptionHandler,并且通过Scheduler#scheduleEntry和Scheduler#scheduleFinally调度的命令被正确调用.

你的问题是这个.调用该函数时,这不是您的MyModule类(它最可能是$wnd对象).这就是你链接的问题使用var that = this.这是关于范围界定的.

你还需要实际调用该方法,而不仅仅是引用它:在JSNI中,第一对parens用于形式参数(消除歧义的歧义),你需要另一对传递实际参数:.@ mypackage.MyModule: :refreshModuleJava()().

java – android外部jar问题

java – android外部jar问题

为了寻找上传图像的方法,我在这个简单的解释后添加了许多外部JAR:using-multipartentity-in-android-applications
但是,当我尝试编译代码时,我收到一个错误:

[2012-12-14 11:37:55 - Dex Loader] Unable to execute dex: Multiple dex files define Lorg/apache/http/ConnectionClosedException;

我之前从未使用过外部库.有人能告诉我如何解决这个问题吗?

解决方法:

可以在多个库中定义相同的类/类.这就是你得到这个错误的原因.您需要检查哪些类重叠,并通过重新组织或删除一些外部库来解决问题.

它也可能是一个日食问题.尝试清理您的项目.

请参阅以下主题:

Unable to execute dex: Multiple dex files define Lcom/myapp/R$array;

Unable to execute dex: Multiple dex files define

Error when building apk – “Multiple dex files define Lcom/google/ads/Ad”

java – Jax-ws,spring和SpringBeanAutowiringSupport

java – Jax-ws,spring和SpringBeanAutowiringSupport

虽然在我的@Webservice类中
我扩展了 SpringBeanAutowiringSupport,自动装配根本不适用于Spring 2.5,
tomcat6中.

什么都没注入.

我在main方法中测试了那些bean自动装配,使用classpathcontext,一切都注入正常.
但不适用于jax-ws端点.

你有想法吗?

解决方法

我猜你正在使用这个配置元素:

<context:annotation-config />

但要启用对@Endpoint注释的支持,必须添加以下元素:

<context:component-scan base-package="" />

今天关于Java WAR-从外部JAR加载Spring Beanspringboot加载外部jar的介绍到此结束,谢谢您的阅读,有关@Autowire从外部jar创建的spring bean?、GWT – 从外部javascript调用实例方法、java – android外部jar问题、java – Jax-ws,spring和SpringBeanAutowiringSupport等更多相关知识的信息可以在本站进行查询。

本文标签: