问题标签 [spring-java-config]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1744 浏览

spring - 使用 Spring Java @Configuration 定义多个 entityManagerFactory bean

我在我的系统中使用多个数据库。我正在使用AtomikosDataSourceBean在多个数据库之间启用 xa 分布式事务。

spring-configuration.xml文件中,我可以为两个单独的实体管理器工厂 1 和实体管理器工厂 2 创建 bean EntityManagerFactory。但是当我使用 Spring Java@Configuration时,我得到了错误。

如果我将一个创建为 entityManagerFactory,另一个创建为 entityManagerFactory1,则会收到错误消息

对于在 entityManagerFactory1 下创建的实体。

有人可以帮我弄清楚如何在 Spring Java @Configuration 中定义两个单独的 entityManagerFactory。

0 投票
8 回答
108269 浏览

java - Spring Java Config:如何使用运行时参数创建原型范围的@Bean?

使用 Spring 的 Java Config,我需要使用只能在运行时获得的构造函数参数来获取/实例化一个原型范围的 bean。考虑以下代码示例(为简洁起见进行了简化):

其中 Thing 类定义如下:

注意:namefinal只能通过构造函数提供,并保证不变性。其他依赖项是Thing类的特定于实现的依赖项,不应为请求处理程序实现所知(紧密耦合)。

此代码与 Spring XML 配置完美配合,例如:

如何使用 Java 配置实现相同的目标?以下不适用于 Spring 3.x:

现在,我可以创建一个工厂,例如:

但这违背了使用 Spring 替换 ServiceLocator 和 Factory 设计模式的全部意义,这对于这个用例来说是理想的。

如果 Spring Java Config 可以做到这一点,我将能够避免:

  • 定义工厂接口
  • 定义工厂实现
  • 为工厂实现编写测试

对于 Spring 已经通过 XML 配置支持的微不足道的事情,这是大量的工作(相对而言)。

0 投票
1 回答
1422 浏览

java - 在 Spring Java 配置的注释中使用占位符

我有点迷失在 Spring 的属性替换机制中。假设我有这个 Java Config

现在我想添加一个 Spring-Data Annotation@EnableMongoRepositories并定义一个用于扫描的自定义基本包,使用自定义占位符,如下所示 @EnableMongoRepositories("${my.custom.repobasepackage}")。占位符在我的 default.properties 中定义。

但是,这里无法解析此属性。当深入研究 Spring 的属性替换时,我可以看到它试图解析属性,因此可以这样做。

但是,用于替换占位符的底层Environment类不知道我的 PropertyPlaceholderConfigurer,而只知道我的 SystemProperties 和我的 VM-Props。:-(

我可以看到在 org.springframework.context.annotation.ClassPathBeanDefinitionScanner#getOrCreateEnvironment.java#339 (我正在使用 Spring 4.0.1)我的“PropertyPlaceholder”已经到位,所以它不是初始化排序的问题,而是没有使用,因为使用的 BeanDefinitionRegistry 没有实现 Interface EnvironmentCapable。到这里,我对 Spring App-Context Bootstrapping 的理解到此结束。

有人可以帮我吗?是否有一个 BeanDefinitionRegistry 能够提供Environment使用我的属性占位符的实例?

任何帮助都非常感谢!我给你准备了饼干!:-))

干杯,斯特凡

0 投票
2 回答
308 浏览

java - 决定在运行时加载哪个 JavaConfig 类

有多个用 @Configuration 注释的类,我想在顶级配置组件中决定在上下文中注册哪个类。

我知道我可以使用 @Profile 在多个配置类中进行选择。但是,我已经使用配置文件来区分环境。配置类的选择与环境无关。

如何在运行时选择要加载的配置类?

我可以拥有多个活动配置文件,例如“Production, WithDatabase”吗?

如果是这样,我如何添加基于属性的配置文件?

0 投票
4 回答
27185 浏览

java - Spring Security 自定义令牌过滤器

我正在尝试执行自定义过滤器以获取令牌并对其进行验证。我正在遵循此响应中的方法。

这是相关的配置:

安全配置:

身份验证令牌过滤器:

令牌认证:

令牌认证提供者:

但这就像 AuthenticationTokenFilter 没有被添加到链中一样。调试我可以看到,当我进行调用时,它会进入 SecurityConfig 和 configure 方法,但不会进入过滤器。什么不见​​了?

0 投票
1 回答
14946 浏览

java - 使用 Java Config 对 Spring Security 匿名访问感到困惑

我将以下 Java Config 与 Spring Security 一起使用:

基于此配置,所有请求都经过身份验证。当您在未经过身份验证的情况下点击控制器时,AnonymousAuthenticationFilter将为您创建一个 Authentication 对象username=anonymousUser, role=ROLE_ANONYMOUS

我正在尝试提供对特定控制器方法的匿名访问,并尝试使用以下各项:

  1. @Secured("ROLE_ANONYMOUS")
  2. @Secured("IS_AUTHENTICATED_ANONYMOUSLY")

当控制器方法被调用时,会给出以下响应:“HTTP 状态 401 - 需要完全身份验证才能访问此资源”

有人可以帮我理解为什么我们会收到此消息以及为什么ROLE_ANONYMOUS/IS_AUTHENTICATED_ANONYMOUSLY似乎无法使用此配置吗?

谢谢,
JP

0 投票
0 回答
1533 浏览

java - Spring MVC & Security 3.2 with JavaConfig - WebApplicationContext 被初始化、销毁、再次初始化

本周我将整个 webapp 从 xml config 切换到 JavaConfig。我注意到一些奇怪的行为。我正在使用带有集成 tomcat 的 Netbeans。当我部署我的应用程序时,我在日志中注意到了这一点:

还有其他运行两次的东西......我有一个在我的调度程序 servlet 上下文中侦听 ContextRefreshedEvents 的类。当我调试 Web 应用程序时,我看到日志语句就好像这段代码正在执行一样,但它从未遇到我设置的任何断点……第一次。在那个神秘的上下文似乎完全初始化然后显然被破坏之后,它再次被初始化。这一次,我的断点被命中,我可以单步执行我的代码。我认为我的所有配置文件都是根据我阅读的所有内容正确配置的,并且我的根/调度程序组件扫描互斥而不是扫描相同的包。

这正在成为一个更大的问题,因为现在我正在尝试设置 BCryptPasswordEncoder。我遇到的问题与我上面描述的问题非常相似——尽管我来自我的 CustomUserDetailsS​​ervice,但我不再能够调试或查看来自我的 CustomAuthenticationProvider 的日志记录语句。我开始认为它以某种方式使用了我的 CustomAuthenticationProvider 的缓存实例,该实例来自创建的初始幽灵上下文或其他东西。任何解决此问题的帮助将不胜感激。

我的包设置得很扁平,即:x.controllers、x.services、x.domain、x.dao、x.configuration 等,所以我必须使用一些 excludeFilters 来确保正确的上下文正在扫描正确的组件. 无论如何,这是我的配置:

AbstractAnnotationConfigDispatcherServletInitializer:

服务配置:

安全初始化器:

安全配置:

MVC 配置:

我的上下文刷新了侦听器:

我将省略我的持久性和日志记录配置,因为我认为它不相关......我的 PersistenceConfig 类注释为:

并且 Log4jConfig 注释为:

您可能会注意到一件奇怪的事情,那就是我的 Initializer 实现了使用 @Configuration 注释的 ApplicationListener 类。我这样做只是为了让根 ServiceConfig 在它的组件扫描期间不会拾取它,它只会在调度程序 servlet 上下文中创建。

在经历了很多痛苦和痛苦之后,我认为问题不在于我的 Spring 配置,而是我在 AbstractAnnotationConfigDispatcherServletInitializer 类中缺少的东西......不知何故,不知何故,有些东西使它加倍工作。我应该覆盖受保护的 WebApplicationContext createRootApplicationContext() 还是 public void onStartup(ServletContext servletContext) throws ServletException 或手动创建上下文的东西?

更新

我有一种怀疑,即同时使用 AbstractAnnotationConfigDispatcherServletInitializer 扩展的 WebApplicationInitializer 和 AbstractSecurityWebApplicationInitializer 扩展的 WebApplicationListener 是造成这种情况的根本原因。尽管我知道它会导致 spring security 失败,因为它没有注册 spring security 过滤器链,但我还是决定删除这个类,看看它是否能解决问题——没有区别。

出于沮丧,我决定下载 glassfish 并将其部署到那里。我第一次部署它时,它只运行了一次!它部署了,但很明显,我无法登录,因为弹簧安全性现在被破坏了。作为测试,我重新添加了类“public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {}”,看看会发生什么。正如我所料,问题再次出现。一切都经历了两次。所以,我再次删除它,现在我遇到了完全相同的问题。它仍在构建上下文,运行我的初始化,破坏上下文,然后重新开始。就像第二个注册的 WebApplicationInitializer 以某种方式卡住或缓存在 Web 服务器中。这是我能想到的唯一解释......所以我

0 投票
3 回答
4391 浏览

java - 使用 Java Config 覆盖 Autowire 设置器

考虑以下类:

在某些情况下,需要覆盖自动装配的注入,例如当 Spring 找不到注入的单个候选者时。在 XML 中,我可以有以下示例:

有没有办法用 Java Config 做同样的事情?以下内容不起作用(我理解为什么),因为 Spring 在从 myBean 方法返回后尝试自动装配该属性,但它因 NoUniqueBeanDefinitionException 而失败:

修改 MyBean 类并不总是一种选择,例如因为它来自外部库。这是我必须使用 XML 配置的情况吗?

谢谢,安德里亚·波尔奇

更新 感谢这两种解决方案(按名称注入和使用@Primary),但它们不能解决我的用例,所以我认为我需要更具体。

在我的用例中,MyBean 类来自外部库,因此无法对其进行任何更改。我还需要有多个 MyBean 实例,每个实例都注入不同的 A 接口实例。我已经更新了上面的代码以反映这一点(xml 和 java)。

有没有使用java config的解决方案?是否可以避免自动装配对 MyBean 的依赖?(仅在该类的 bean 上,不会为上下文中的每个 bean 完全禁用自动装配)

0 投票
1 回答
66 浏览

spring - 带有 Spring Secuirty 的登录栏

我正在使用 Spring Boot 和 Spring Security 开发基于 Spring 的 Web 应用程序。

我有一个具体而详细的登录页面{mywebapp}/login,但我想在每个页面中都有一个登录栏,目的是提供快速登录设施。如何设置我的项目以实现此目标(通过使用 Java Config,因此使用注释和方法,避免使用 xml 文件)?

0 投票
5 回答
36701 浏览

spring - 使用 Java 注释使用 Spring 发送电子邮件

如何使用纯基于注释的方法(根据Java 配置规则)发送带有Spring 4(和Spring Boot )的电子邮件?