在CDI中,我可以这样做:
// Qualifier annotation
@Qualifier
@inteface Specific{}
interface A {}
class DefaultImpl implements A {}
@Specific
class SpecificImpl implements A {}
Run Code Online (Sandbox Code Playgroud)
然后在课堂上:
@Inject
A default;
@Inject
@Specific
A specific;
Run Code Online (Sandbox Code Playgroud)
它的工作原理是由于@Default限定符自动分配给注入点而未指定任何限定符.
但我正在使用Spring并且无法执行该操作.
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException
Run Code Online (Sandbox Code Playgroud)
问题是"默认"注入(没有限定符)已经在我无法更改的许多代码中使用,我需要A为我的用户提供另一种可能的实现.
我知道我可以通过bean名称注入我的新实现,但我想避免它.
Spring中有什么可以帮助我实现它吗?
前段时间,jdk 6发布了带有" 基于注释的SQL查询 "的JDBC4 .我正在寻找测试方法,但没有在JDK 6中找到所需的类(如java.sql.BasicQuery).在Google上搜索了一点,我发现java.net上有一个线程告诉这些"用户的易用性" "由于缺乏时间,JDK中最终没有包含这些功能.这里有人告诉我更多关于这些功能的未来可用性吗?
我正在构建一个原型,我想在其中包含一个带有一些可执行二进制文件的文件夹.问题是,当我从原型创建一个新项目时,创建的可执行二进制文件没有可执行权限.
如何告诉maven保留对这些文件的执行权限?或者也许有一种方法告诉maven在生成时自动添加执行权限?
我在github上提供了一个例子,它使用tomcat embedded来启动一个简单的spring MVC应用程序.应用程序启动显然没有问题,但在渲染的jsp中,el表达式未被处理.
这是我的pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>springtomcatembedded</artifactId>
<name>SpringMVCTomcatEmbedded</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>1.6</java-version>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
<tomcat.version>7.0.50</tomcat.version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version> …Run Code Online (Sandbox Code Playgroud) 我们有使用tomcat托管的多个java web应用程序.一些应用程序包括xercesImpl jar,其他应用程序不包括xercesImpl.jar.
为简单起见,假设我们只有两个应用程序:
两个应用程序在引导时都进行一些xml解析,并且仅使用java.*和javax.*(不直接导入org.apache.xerces).
如果xxx.war首先启动,而yyy.war在尝试解析xml时遇到错误,会发生什么:
Caused by: org.xml.sax.SAXException: SAX2 driver class org.apache.xerces.parsers.SAXParser not found
java.lang.ClassNotFoundException: org.apache.xerces.parsers.SAXParser
at org.xml.sax.helpers.XMLReaderFactory.loadClass(XMLReaderFactory.java:230)
at org.xml.sax.helpers.XMLReaderFactory.createXMLReader(XMLReaderFactory.java:191)
at ca.icod.personne.adressePostale.RecuperateurFormat.createXMLReader(RecuperateurFormat.java:246)
at ca.icod.personne.adressePostale.RecuperateurFormat.parse(RecuperateurFormat.java:214)
... 127 more
Caused by: java.lang.ClassNotFoundException: org.apache.xerces.parsers.SAXParser
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1856)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1705)
at org.xml.sax.helpers.NewInstance.newInstance(NewInstance.java:82)
at org.xml.sax.helpers.XMLReaderFactory.loadClass(XMLReaderFactory.java:228)
Run Code Online (Sandbox Code Playgroud)
当应用程序以相反的顺序启动时,启动时没有问题.我假设发生的是当xxx.war启动时,找到xercesImpl,因此读取内部的META-INF/services文件夹,因此xerces被标记为要在JVM中使用的xml实现.然后当yyy.war尝试点xml的东西时,JVM仍然认为它应该使用xerces但这次它不在类路径上:ClassNotFoundException
我们希望从我们的应用程序中逐步删除xerces,因为jdk的默认实现似乎可以完成这项工作.
但是我们几乎不能一次性删除xerces,也不能将托管xerces的webcat的tomcat服务器与托管xercesless webapps的托管服务器分开.
我是否想念一些奇怪的事情,或者有人在这里解决了类似问
我有一个maven项目进行单元测试,并希望使用CDI.我把焊接se依赖放在pom.xml中,如下所示:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se</artifactId>
<version>1.1.8.Final</version>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.0-SP3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我在JUnit测试运行器中启动焊接:
public class WeldJUnit4Runner extends BlockJUnit4ClassRunner {
private final Class klass;
private final Weld weld;
private final WeldContainer container;
public WeldJUnit4Runner(final Class klass) throws InitializationError {
super(klass);
this.klass = klass;
this.weld = new Weld();
this.container = weld.initialize();
}
@Override
protected Object createTest() throws Exception {
final Object test = container.instance().select(klass).get();
return test;
}
}
Run Code Online (Sandbox Code Playgroud)
以及使用此跑步者的单元测试.测试是注入一个应用程序范围的bean.问题是焊接不能初始化,因为对唯一的注入点有"不满意的依赖",好像我的应用程序作用域bean完全不知道焊接.但是那个bean在我的测试中是在src/test/java/...中(但是在另一个java包中).
我在src/test/resources中有一个空的beans.xml.
我注意到焊接在启动时会发出警告,但我不认为这些是我的问题的原因:
604 [main] WARN org.jboss.weld.interceptor.util.InterceptionTypeRegistry - Class 'javax.ejb.PostActivate' …Run Code Online (Sandbox Code Playgroud) 我知道这个问题已在堆栈溢出中得到解答,但就我而言,我在google开发人员控制台中有一个名为"firebase-demo-project"的项目.在同一个控制台中,我无法删除项目:似乎我没有权限这样做(删除选项是灰色的).
另一方面,在同一用户的firebase控制台中,我根本没有任何项目.所以我不能从firebase中删除该项目,因为它不在那里.
任何人都可以帮忙吗?
使用:
我做了什么:
1:expo-cli init测试
出现提示时,我选择创建一个空白项目.
2:cd测试
3:npm install --save native-base
4:npm install --save @ expo/vector-icons
然后我在App.js中导入并使用基于本地的Text组件
以下是构建应用时出现的错误:
无法从"node_modules/native-base/dist/src/basic/IconNB.js"解析"@ expo/vector-icons/FontAwesome5"
有任何建议或是否是已知问题?我做错了吗?
我有与这里完全相同的问题:Spring Boot - KeyCloakdirected to 403禁止\n但是,该问题的答案表明角色可能没有在keycloak服务器中配置或分配,这就是我的情况。
\n\n一个有角度的前端应用程序,使用 keycloak 服务器对用户进行身份验证。
\n\n然后,使用 keycloak-spring-boot-2-starter 将收到的令牌传递给使用 spring-boot 开发的 Rest 服务。
\n\n这就是问题所在:我的服务获取令牌,使用 keycloak 对其进行身份验证,没有问题,但向客户端应用程序返回 403。
\n\n我确实调试了 keycloak 适配器,发现在请求中找到的主体 (GenericPrincipal) 中没有角色信息(和空列表)。
\n\n在keycloak服务器上,我在领域设置中添加了角色,并将该角色分配给用户(只有一个用户)。也尝试过客户端角色(使用 use-resource-role-mappings: true )但同样的问题。
\n\n这是我在 application.yaml 中的 keycloak 配置:
\n\nkeycloak:\n auth-server-url: http://localhost:8084/auth\n ssl-required: external\n realm: soccer-system\n resource: league-service\n bearer-only: true\n cors: true\n use-resource-role-mappings: false\n enabled: true\n credentials:\n secret: myClientKey\n security-constraints:\n 0:\n auth-roles:\n - user\n security-collections:\n 0:\n patterns:\n - /*\nRun Code Online (Sandbox Code Playgroud)\n\nKeycloak服务器版本是3.4.3.Final
\n\n我已经为此苦苦挣扎了两天。希望有人能带我上路:)
\n\nMaven 依赖项: …
在项目创建的某个时候,我们不会选择一些选项,之后我们会想要使用它们.我读过它是可能的,如果我们编辑.yo-rc.json文件并重新执行jhipster,如此处所述.
这就是为什么我问这个问题:有没有我可以联系的参考文献,所以我能感觉到我知道我在做什么?
现在我用来创建另一个项目,其中包含我想要添加的选项以及生成的文件中的选择.
java ×5
tomcat ×2
annotations ×1
cdi ×1
jdbc ×1
jhipster ×1
junit ×1
keycloak ×1
maven ×1
native-base ×1
react-native ×1
spring ×1
spring-boot ×1
spring-mvc ×1
weld ×1
xerces ×1