本篇文章给大家谈谈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)
- @Autowire从外部jar创建的spring bean?
- GWT – 从外部javascript调用实例方法
- java – android外部jar问题
- java – Jax-ws,spring和SpringBeanAutowiringSupport
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?
我有一个已创建的模块/ 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调用实例方法
您可以在其文档 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"); }
我觉得非常有趣的是调用了警报,我在浏览器中看到了结果,但是之前的调用没有被执行.
你知道它是否真的可以做这样的事情?
解决方法
你的问题是这个.调用该函数时,这不是您的MyModule类(它最可能是$wnd对象).这就是你链接的问题使用var that = this.这是关于范围界定的.
你还需要实际调用该方法,而不仅仅是引用它:在JSNI中,第一对parens用于形式参数(消除歧义的歧义),你需要另一对传递实际参数:.@ mypackage.MyModule: :refreshModuleJava()().
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
我扩展了 SpringBeanAutowiringSupport,自动装配根本不适用于Spring 2.5,
tomcat6中.
什么都没注入.
我在main方法中测试了那些bean自动装配,使用classpathcontext,一切都注入正常.
但不适用于jax-ws端点.
你有想法吗?
解决方法
<context:annotation-config />
但要启用对@Endpoint注释的支持,必须添加以下元素:
<context:component-scan base-package="" />
今天关于Java WAR-从外部JAR加载Spring Bean和springboot加载外部jar的介绍到此结束,谢谢您的阅读,有关@Autowire从外部jar创建的spring bean?、GWT – 从外部javascript调用实例方法、java – android外部jar问题、java – Jax-ws,spring和SpringBeanAutowiringSupport等更多相关知识的信息可以在本站进行查询。
本文标签: