问题标签 [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.
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。
java - Spring Java Config:如何使用运行时参数创建原型范围的@Bean?
使用 Spring 的 Java Config,我需要使用只能在运行时获得的构造函数参数来获取/实例化一个原型范围的 bean。考虑以下代码示例(为简洁起见进行了简化):
其中 Thing 类定义如下:
注意:name
它final
只能通过构造函数提供,并保证不变性。其他依赖项是Thing
类的特定于实现的依赖项,不应为请求处理程序实现所知(紧密耦合)。
此代码与 Spring XML 配置完美配合,例如:
如何使用 Java 配置实现相同的目标?以下不适用于 Spring 3.x:
现在,我可以创建一个工厂,例如:
但这违背了使用 Spring 替换 ServiceLocator 和 Factory 设计模式的全部意义,这对于这个用例来说是理想的。
如果 Spring Java Config 可以做到这一点,我将能够避免:
- 定义工厂接口
- 定义工厂实现
- 为工厂实现编写测试
对于 Spring 已经通过 XML 配置支持的微不足道的事情,这是大量的工作(相对而言)。
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
使用我的属性占位符的实例?
任何帮助都非常感谢!我给你准备了饼干!:-))
干杯,斯特凡
java - 决定在运行时加载哪个 JavaConfig 类
有多个用 @Configuration 注释的类,我想在顶级配置组件中决定在上下文中注册哪个类。
我知道我可以使用 @Profile 在多个配置类中进行选择。但是,我已经使用配置文件来区分环境。配置类的选择与环境无关。
如何在运行时选择要加载的配置类?
我可以拥有多个活动配置文件,例如“Production, WithDatabase”吗?
如果是这样,我如何添加基于属性的配置文件?
java - Spring Security 自定义令牌过滤器
我正在尝试执行自定义过滤器以获取令牌并对其进行验证。我正在遵循此响应中的方法。
这是相关的配置:
安全配置:
身份验证令牌过滤器:
令牌认证:
令牌认证提供者:
但这就像 AuthenticationTokenFilter 没有被添加到链中一样。调试我可以看到,当我进行调用时,它会进入 SecurityConfig 和 configure 方法,但不会进入过滤器。什么不见了?
java - 使用 Java Config 对 Spring Security 匿名访问感到困惑
我将以下 Java Config 与 Spring Security 一起使用:
基于此配置,所有请求都经过身份验证。当您在未经过身份验证的情况下点击控制器时,AnonymousAuthenticationFilter
将为您创建一个 Authentication 对象username=anonymousUser, role=ROLE_ANONYMOUS
。
我正在尝试提供对特定控制器方法的匿名访问,并尝试使用以下各项:
@Secured("ROLE_ANONYMOUS")
@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
当控制器方法被调用时,会给出以下响应:“HTTP 状态 401 - 需要完全身份验证才能访问此资源”
有人可以帮我理解为什么我们会收到此消息以及为什么ROLE_ANONYMOUS
/IS_AUTHENTICATED_ANONYMOUSLY
似乎无法使用此配置吗?
谢谢,
JP
java - Spring MVC & Security 3.2 with JavaConfig - WebApplicationContext 被初始化、销毁、再次初始化
本周我将整个 webapp 从 xml config 切换到 JavaConfig。我注意到一些奇怪的行为。我正在使用带有集成 tomcat 的 Netbeans。当我部署我的应用程序时,我在日志中注意到了这一点:
还有其他运行两次的东西......我有一个在我的调度程序 servlet 上下文中侦听 ContextRefreshedEvents 的类。当我调试 Web 应用程序时,我看到日志语句就好像这段代码正在执行一样,但它从未遇到我设置的任何断点……第一次。在那个神秘的上下文似乎完全初始化然后显然被破坏之后,它再次被初始化。这一次,我的断点被命中,我可以单步执行我的代码。我认为我的所有配置文件都是根据我阅读的所有内容正确配置的,并且我的根/调度程序组件扫描互斥而不是扫描相同的包。
这正在成为一个更大的问题,因为现在我正在尝试设置 BCryptPasswordEncoder。我遇到的问题与我上面描述的问题非常相似——尽管我来自我的 CustomUserDetailsService,但我不再能够调试或查看来自我的 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 服务器中。这是我能想到的唯一解释......所以我
java - 使用 Java Config 覆盖 Autowire 设置器
考虑以下类:
在某些情况下,需要覆盖自动装配的注入,例如当 Spring 找不到注入的单个候选者时。在 XML 中,我可以有以下示例:
有没有办法用 Java Config 做同样的事情?以下内容不起作用(我理解为什么),因为 Spring 在从 myBean 方法返回后尝试自动装配该属性,但它因 NoUniqueBeanDefinitionException 而失败:
修改 MyBean 类并不总是一种选择,例如因为它来自外部库。这是我必须使用 XML 配置的情况吗?
谢谢,安德里亚·波尔奇
更新 感谢这两种解决方案(按名称注入和使用@Primary),但它们不能解决我的用例,所以我认为我需要更具体。
在我的用例中,MyBean 类来自外部库,因此无法对其进行任何更改。我还需要有多个 MyBean 实例,每个实例都注入不同的 A 接口实例。我已经更新了上面的代码以反映这一点(xml 和 java)。
有没有使用java config的解决方案?是否可以避免自动装配对 MyBean 的依赖?(仅在该类的 bean 上,不会为上下文中的每个 bean 完全禁用自动装配)
spring - 带有 Spring Secuirty 的登录栏
我正在使用 Spring Boot 和 Spring Security 开发基于 Spring 的 Web 应用程序。
我有一个具体而详细的登录页面{mywebapp}/login
,但我想在每个页面中都有一个登录栏,目的是提供快速登录设施。如何设置我的项目以实现此目标(通过使用 Java Config,因此使用注释和方法,避免使用 xml 文件)?
spring - 使用 Java 注释使用 Spring 发送电子邮件
如何使用纯基于注释的方法(根据Java 配置规则)发送带有Spring 4(和Spring Boot )的电子邮件?