实现 ApplicationContextAware - ApplicationContext 为 NULL

2023-12-13

我正在编写一个 Tomcat 应用程序,它充当一些内部服务的代理。

我已将 Spring 项目从混合 XML 和基于注释的配置切换为 Java 和基于注释的配置。

在切换配置风格之前,该应用程序运行良好。现在我有两个问题。

  1. 在我的两个过滤器中执行 init-methods 时,ApplicationContext一片空白。当我调试我的应用程序时,我可以看到该方法setApplicationContext被执行。

  2. the EntityManagerFactory未注入身份验证过滤器中(emf一片空白)

Spring启动代码:

import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

public class MyAppSpringBoot implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) throws ServletException {
        initRootContext(container);
        initDispatcherContext(container);
        addFilters(container);
    }

    private void initDispatcherContext(ServletContext container) {
        AnnotationConfigWebApplicationContext servletContext = new AnnotationConfigWebApplicationContext();
        servletContext.register(MyAppDispatcherServletContext.class);
        ServletRegistration.Dynamic dispatcher
                = container.addServlet("myAppDispatcherServlet", new DispatcherServlet(servletContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }

    private void initRootContext(ServletContext container) {
        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        rootContext.register(MyAppRootContext.class);
        container.addListener(new ContextLoaderListener(rootContext));
    }

    private void addFilters(ServletContext container) {
        FilterRegistration.Dynamic registration
                = container.addFilter("u3rAuthentication", UserDbAuthenticationFilter.class);
        registration.addMappingForUrlPatterns(null, false, "/entry/*");

        registration = container.addFilter("responseXmlFilter", ResponseTextXmlFilter.class);
        registration.addMappingForUrlPatterns(null, false, "/entry/*");
    }
}

根上下文的代码:

import java.io.File;
import java.io.IOException;
import java.util.Properties;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException;
import org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.stereotype.Controller;

@Configuration
@ComponentScan(basePackages = "com.application", excludeFilters = @ComponentScan.Filter(Controller.class))
public class MyAppRootContext {

    @Bean
    public DataSource userDbJpaDataSource() throws DataSourceLookupFailureException {

        JndiDataSourceLookup lookup = new JndiDataSourceLookup();
        return lookup.getDataSource("jdbc/userDbPostgres");
    }

    @Bean
    public EntityManagerFactory entityManagerFactory() {
        //return Persistence.createEntityManagerFactory(MyAppConstants.U3R_PERSISTENCE_UNIT);
        LocalContainerEntityManagerFactoryBean fb = new LocalContainerEntityManagerFactoryBean();
        fb.setDataSource(userDbJpaDataSource());
        return fb.getNativeEntityManagerFactory();
    }

    @Bean
    public DiskFileItemFactory diskFileItemFactory() {
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(50_000 * 1024);
        factory.setRepository(new File("/WEB-INF/upload"));
        return factory;
    }

    @Bean
    public XMLOutputFactory xmlOutputFactory() {
        return XMLOutputFactory.newInstance();
    }

    @Bean
    public XMLInputFactory xmlInputFactory() {
        return XMLInputFactory.newInstance();
    }

    @Bean
    public XMLEventFactory xmlEventFactory() {
        return XMLEventFactory.newInstance();
    }

    @Bean
    public UrlPairing urlPairing() throws IOException {
        return new UrlPairing(myAppProperties().getProperty("myApp.UrlPairingFile"));
    }

    @Bean
    public Properties myAppProperties() throws IOException {
        Properties p = new Properties();
        p.load(MyAppRootContext.class.getResourceAsStream("/myAppConfig.properties"));
        return p;
    }

    @Bean
    public MyAppXmlFilterWords xmlFilterWords() throws IOException {
        MyAppXmlFilterWords words = MyAppXmlFilterWords.createFilterWords(myAppProperties().getProperty("myApp.xmlFilterWordFile"));
        return words;
    }

}

调度程序 servlet 上下文的代码:

@Configuration
@ComponentScan(
        basePackages = "de.lgn.doorman",
        includeFilters = @ComponentScan.Filter(Controller.class)
)
public class MyAppDispatcherServletContext
{
    // all beans are defined in root context
    // correct ???
}

根认证过滤器代码:

@Component
public class UserDbAuthenticationFilter implements Filter, ApplicationContextAware
{
    private static final Logger logger = LogManager.getLogger(UserDbAuthenticationFilter.class.getName());

    @Autowired
    EntityManagerFactory emf;

    private ApplicationContext appContext;

    @Override
    public void init(FilterConfig filterConfig)    
    {
        logger.debug("Filter {} initialisiert. App-Context: {} {}", this.getClass().getName(),appContext.hashCode(), appContext);
        // *******************  NullPointerException here *******************
    }

    @Override
    public void destroy()
    { }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
    {
        appContext = applicationContext;
    }

    /*
    @PostConstruct    // ***************** this annotation isn't working **********************
    public void filterInit() throws ServletException
    {
        logger.debug("Filter {} initialisiert. App-Context: {} {}", this.getClass().getName(),appContext.hashCode(), appContext);
    }

    */
}

在我的控制器中,ApplicationContext是正确的(不为空)。

@Controller
@RequestMapping(value = "entry/**")
public class MyAppProxyController implements ApplicationContextAware
{

    @Autowired
    Properties myAppProperties;

    private ApplicationContext appContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
    {
        appContext = applicationContext;
    }

    @PostConstruct
    public void init() throws ServletException   // this is working fine
    {
        logger.debug("Controller {} initialisiert. App-Context: {} {}", this.getClass().getName(),
                appContext.hashCode(), appContext);

        logger.debug("Beans im Zugriff von Controller:");
        for (String beanName : appContext.getBeanDefinitionNames())
        {
            logger.debug("          {}", beanName);
        }
        MyAppProxyController controller = (MyAppProxyController) appContext.getBean("myAppProxyController");
        logger.debug("controller-hash im Controller={}", controller.hashCode());
    }
}    

更新 Serge Ballesta 的答案

我遵循了你的所有指示#2。但现在我得到了这个例外:

13-Aug-2015 13:03:27.264 INFO [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ApplicationContext.log Spring WebApplicationInitializers detected on classpath: [de.lgn.doorman.config.DmSpringBoot@c427b4f]
13-Aug-2015 13:03:27.655 INFO [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ApplicationContext.log Initializing Spring root WebApplicationContext
13-Aug-2015 13:03:28.308 SEVERE [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.filterStart Exception starting filter responseXmlFilter
 org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'responseXmlFilter' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:698)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1174)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:283)

我想知道我自己的滤镜用了三遍之后是怎么连接到链条上的DelegatingFilterProxy。是参数name在方法中addFilter与 bean 名称相关吗?

Serge Ballesta 答案的更新 2

这是在中创建过滤器链的代码引导代码:

private void addFilters(ServletContext container)
{
    FilterRegistration.Dynamic registration =
            container.addFilter("userDbAuthenticationFilter", DelegatingFilterProxy.class);
    registration.addMappingForUrlPatterns(null, false, "/mapgate/*");

    registration = container.addFilter("prepareRequestFilter", DelegatingFilterProxy.class);
    registration.addMappingForUrlPatterns(null, false, "/mapgate/*");

    registration = container.addFilter("responseTextXmlFilter", DelegatingFilterProxy.class);
    registration.addMappingForUrlPatterns(null, false, "/mapgate/*");
}

这些是我的过滤器 bean 定义根上下文:

@Configuration
@ComponentScan(basePackages = "com.application", excludeFilters = @ComponentScan.Filter(Controller.class))
public class MyAppRootContext
{

    @Bean
    public UserDbAuthenticationFilter userDbAuthenticationFilter()
    {
        return new UserDbAuthenticationFilter();
    }

    @Bean
    public PrepareRequestFilter prepareRequestFilter()
    {
        return new PrepareRequestFilter();
    }

    @Bean
    public ResponseTextXmlFilter responseTextXmlFilter()
    {
        return new ResponseTextXmlFilter();
    }

    @Bean
    public DataSource userDbJpaDataSource() throws DataSourceLookupFailureException
    {

        JndiDataSourceLookup lookup = new JndiDataSourceLookup();
        return lookup.getDataSource("jdbc/userDbPostgres");
    }

    @Bean
    public EntityManagerFactory entityManagerFactory()
    {
        LocalContainerEntityManagerFactoryBean fb = new LocalContainerEntityManagerFactoryBean();
        fb.setDataSource(userDbJpaDataSource());
        return fb.getNativeEntityManagerFactory();
    }
}

过滤器仍然没有依赖注入。是因为过滤器链是在引导阶段创建的,而bean是在根上下文中创建的吗?

Serge Ballesta 答案的更新 3

这是身份验证过滤器中的基本代码:

public class U3RAuthenticationFilter implements Filter, ApplicationContextAware
{
    private static final Logger logger = LogManager.getLogger(U3RAuthenticationFilter.class.getName());

    @Autowired(required = true)
    EntityManagerFactory entityManagerFactory;

    private ApplicationContext appContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
    {
        appContext = applicationContext;
    }

    @PostConstruct
    public void filterInit() throws ServletException
    {
        logger.debug("Filter {} initialisiert. App-Context: {} {}", this.getClass().getName(),appContext.hashCode(), appContext);
        logger.debug("Beans accessable by {}:", this.getClass().getName());
        for (String beanName : appContext.getBeanDefinitionNames())
        {
            logger.debug("          {}", beanName);
        }

        logger.debug("EntityManagerFactory: {}", (EntityManagerFactory)appContext.getBean("entityManagerFactory"));
    }
}

没有抛出异常。这是日志记录:

20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1] controller-hash im Controller=1481031354
20150814-090718 INFO  [RMI TCP Connection(3)-127.0.0.1] Mapped "{[/mapgate/**],methods=[GET]}" onto protected void com.application.controller.MyAppProxyController.doGet(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
20150814-090718 INFO  [RMI TCP Connection(3)-127.0.0.1] Mapped "{[/mapgate/**],methods=[POST]}" onto protected void com.application.controller.MyAppProxyController.doPost(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws javax.servlet.ServletException,java.io.IOException
20150814-090718 INFO  [RMI TCP Connection(3)-127.0.0.1] Looking for @ControllerAdvice: WebApplicationContext for namespace 'myAppDispatcherServlet-servlet': startup date [Fri Aug 14 09:07:18 CEST 2015]; parent: Root WebApplicationContext
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1] Filter com.application.filter.UserDbAuthenticationFilter initialisiert. App-Context: 641348200 WebApplicationContext for namespace 'myAppDispatcherServlet-servlet': startup date [Fri Aug 14 09:07:18 CEST 2015]; parent: Root WebApplicationContext
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1] Beans accessable by com.application.filter.UserDbAuthenticationFilter:
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           org.springframework.context.annotation.internalConfigurationAnnotationProcessor
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           org.springframework.context.annotation.internalAutowiredAnnotationProcessor
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           org.springframework.context.annotation.internalRequiredAnnotationProcessor
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           org.springframework.context.annotation.internalCommonAnnotationProcessor
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           org.springframework.context.annotation.internalPersistenceAnnotationProcessor
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           org.springframework.context.event.internalEventListenerProcessor
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           org.springframework.context.event.internalEventListenerFactory
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           myAppDispatcherServletContext
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           myAppRootContext
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           myAppProxyController
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           requestMappingHandlerMapping
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           mvcContentNegotiationManager
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           viewControllerHandlerMapping
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           beanNameHandlerMapping
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           resourceHandlerMapping
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           mvcResourceUrlProvider
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           defaultServletHandlerMapping
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           requestMappingHandlerAdapter
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           mvcConversionService
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           mvcValidator
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           mvcPathMatcher
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           mvcUrlPathHelper
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           mvcUriComponentsContributor
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           httpRequestHandlerAdapter
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           simpleControllerHandlerAdapter
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           handlerExceptionResolver
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           mvcViewResolver
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           userDbAuthenticationFilter
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           prepareRequestFilter
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           responseTextXmlFilter
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           myAppFilterChain
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           userDbJpaDataSource
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           <b>entityManagerFactory</b>
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           diskFileItemFactory
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           xmlOutputFactory
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           xmlInputFactory
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           xmlEventFactory
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           urlPairing
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           myAppProperties
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1]           xmlFilterWords
20150814-090718 DEBUG [RMI TCP Connection(3)-127.0.0.1] <b>EntityManagerFactory: null</b>

罪魁祸首是addFilter(..)的方法MyAppSpringBoot.

如果你仔细观察这个 LOCFilterRegistration.Dynamic registration = container.addFilter("u3rAuthentication", UserDbAuthenticationFilter.class);很明显,即使UserDbAuthenticationFilter已注册ServletContext作为过滤器,它是not以任何方式与 spring 上下文关联(因为该类是直接注册的,而不是 spring bean,这将解释null参考文献ApplicationContext and emf分别).

虽然是同一个班级UserDbAuthenticationFilter由 spring 扫描并稍后注册为 bean 但not有关联ServletContext作为过滤器(这个 bean 永远不会被调用,因为它没有注册为过滤器,这是你看到你的ApplicationContext调试时设置)

所以同一个类有两个实例UserDbAuthenticationFilter一个作为带有 servlet 的过滤器,另一个作为 spring bean,彼此之间没有关联/链接。

这里你需要的是一个在 servlet 容器中注册的过滤器,它也是一个 spring bean。GenericFilterBean来拯救你。根据您的需要扩展它并注意以下问题(来自 API 文档)

这个通用过滤器基类不依赖于 Spring ApplicationContext 概念。过滤器通常不加载自己的上下文,而是从 Spring 根应用程序上下文访问服务 bean,可通过过滤器的 ServletContext 访问(请参阅 WebApplicationContextUtils)。

希望这可以帮助。如果您遇到任何问题/需要进一步帮助,请在评论中告知。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现 ApplicationContextAware - ApplicationContext 为 NULL 的相关文章

  • 数组查找时间复杂度和。它是如何存储的

    众所周知 通过索引访问数组的时间复杂度是O 1 Java 的文档ArrayList 它由数组支持 对其也有同样的说法get手术 size isEmpty get set iterator 和 listIterator 操作以恒定时间运行 查
  • Spring Batch如何作为Reader读取多个表(查询)并将其写入平面文件写入

    在我的项目中 我读取了具有不同查询的多个表 并将这些结果集合并到平面文件中 我该如何实现这一目标 我的意思是 JdbcReader 直接采用 1 个选择查询 我如何自定义它 如果 JdbcCursorItemReader 不能满足您的需求
  • 编译错误:Android Studio

    我正在尝试修改基于 IntelliJ 构建的现有 Android 项目 我已经搜索并尝试了很多东西 但我的错误仍然没有消失 Error 5 1 android apt compiler main D android tinynote app
  • Windows 上的虚假唤醒。是否可以?

    我最近学习了 虚假唤醒 有人说这个问题只可能发生在某些类型的 Linux PC 上 我用的是窗户 我为虚假唤醒编写了测试 我得到的结果是这是可能的 但我想向您展示这个测试 也许我在某个地方犯了错误 我的初始变体 import java ut
  • 面试问题 - 在排序数组 X 中搜索索引 i,使得 X[i] = i

    昨天面试时 我被问到了以下问题 考虑一个 Java 或 C 数组X它已排序并且其中没有两个元素是相同的 如何最好地找到索引i这样该索引处的元素也是i 那是X i i 作为澄清 她还给了我一个例子 Array X 3 1 0 3 5 7 in
  • JLabel.setText() 中的换行符

    使用 JLabel setText 时如何插入换行符 我尝试使用 Html 但似乎可以使其适用于 setText 仅适用于 jLabel 的初始声明 最初声明 jlabel 时的方法是 label new JLabel Hello Worl
  • java中如何围绕另一个移动对象旋转一个对象?

    我对 Java 很陌生 想要编写一个简单的太阳系统 其中月球绕地球旋转 地球绕太阳旋转 一切正常 除了月亮不想正确移动 由于地球偏离月球的初始位置 月球的自转半径会根据该距离而增大 同样 当地球接近月球惯性位置时 自转半径会减小 如果初始位
  • JTable AutoCreateRowSorter 将数字排序为字符串

    我有一个 JTable JTable table new JTable String colNames c1 DefaultTableModel model new DefaultTableModel Integer x new Integ
  • 用户“root”@“localhost”的访问被拒绝

    我正在尝试从数据库中获取记录 但我面临这个访问被拒绝的问题 我尝试了 Stack Overflow 上提到的其他解决方案 例如向用户授予权限 但没有任何效果 访问数据库的代码 public void service HttpServletR
  • Java 创建 Thread 实例时会发生什么

    我有一个关于 Java 线程和操作系统线程的问题 我读了Java 线程与 Pthreads https stackoverflow com questions 5269535 java threads vs pthreads and Jav
  • Java HttpURLConnection:内容长度计算

    我目前正在为 bitbucket issues RESTful API 开发一个库 我取得了很大的进步 现在我要解决这个部分更新问题 http confluence atlassian com display BBDEV Issues Is
  • java.sql.SQLException: - ORA-01000: 超出最大打开游标数

    我收到 ORA 01000 SQL 异常 所以我有一些与之相关的疑问 最大打开游标是否与 JDBC 连接数完全相关 或者它们也与我们为单个连接创建的语句和结果集对象相关吗 我们正在使用连接池 有没有办法配置数据库中语句 结果集对象的数量 如
  • 用java解密AES加密文件

    我有一个使用 AES 使用 java 应用程序加密的文件 我还有一个加密的密钥文件 但我不明白如何使用密钥来解密文件 大多数教程和示例都会在一个地方创建临时随机密钥 加密文件和解密 所以 问题是如何指定解密时必须使用的密钥 EDIT 我发现
  • 使用 javax.mail 和 CentOS 的邮件服务器

    我有一个 Java 程序 安装在一台旧的 Ubuntu 机器上 并使用 javax mail 发送邮件 然而 那台机器宕机了 我现在在新的 CentOS 机器上运行相同的 Java 应用程序 但是 当我尝试使用 mail smtp host
  • JFreeChart MeterPlot

    我目前正在用java做Agent项目 在某些时候 我需要显示一个仪表 例如 电池电量 我的程序中有 5 个代理 每个代理都会创建自己的带有名称的仪表图 但不知何故他们没有更新数据集 或者他们正在更新数据集 只是它没有显示在仪表图上 任何想法
  • 对于每个抛出异常的语句,try/catch 是否被视为反模式?

    我目前正在审查同事的 Java 代码 我看到很多情况下 每个可能抛出异常的语句都被封装在自己的 try catch 中 其中 catch 块都执行相同的操作 哪个操作与我的问题无关 对我来说 这似乎是一种代码味道 我记得读到过它是一种常见的
  • 用于将字符串与通配符模式进行匹配的递归函数

    所以我一整天都在试图解决这个作业 只是无法完成 以下函数接受 2 个字符串 第二个 不是第一个 可能包含 的 星号 An 是字符串的替换 空 1个字符或更多 它可以出现 仅在s2中 一次 两次 更多或根本不出现 它不能与另一个相邻 ab c
  • SAXParseException:找不到元素“定义”的声明

    我对 camunda 和 DMN 完全陌生 我试图在 spring boot 中运行 DMN 示例 链接在这里 https github com camunda camunda bpm examples tree master dmn en
  • PSQLException:错误:关系“TABLE_NAME”不存在

    我正在尝试在 PostgreSQL 8 4 2 DB 上运行休眠 每当我尝试运行简单的java代码时 例如 List
  • 如何在 SpringDoc OpenAPI 3 中引用文件?

    我有 Spring Boot 项目 我想在其中记录我的 API 这里是正在处理的 Web 服务的示例 ApiResponses value ApiResponse responseCode 200 content Content media

随机推荐

  • Xamarin.Android:DrawerLayout.LayoutParams 中的重力参数

    我正在尝试创建一个DrawerLayout以编程方式使用Xamarin Android 但是我在尝试添加时遇到了问题ListView应该可以从左侧拖动 这是我的代码 DrawerLayout myDrawerLayout new Drawe
  • 显式复制构造函数

    我扩展了 std string 以满足我的需要 必须将自定义函数构建到名为的字符串类中自定义字符串 我已经定义了构造函数 class CustomString public std string public explicit Custom
  • 这个c程序有什么问题吗?调试发现程序被击中了 while (sqroot != 0); [复制]

    这个问题在这里已经有答案了 这是调试过程的截图我正在学习用 C 语言编程 我试图找出一个数字是否是镜像 但是程序编译没有错误 但没有给出所需的结果 调试程序发现它碰到了 while sqroot 0 Mirror number includ
  • 旋转图形但不旋转图例

    我有一个图形 我想旋转 90 度 问题是图例也会旋转 有没有办法只旋转图形 甚至能够将图例的旋转属性设置为 90 度就可以了 对于 xticks 例如我正在使用plt xticks range len mu mse index x labs
  • php Imagick::levelImage 用法

    我已经很努力了 但无法使这个方法正常工作 使用格式为 Imagick levelImage float blackPoint float gamma float whitePoint int channel Imagick CHANNEL
  • 如何在 DirectionsRenderer 打开 Bicycling 层后将其关闭

    In Google Maps API 中有关图层的文档 规定如下 Bicycling 图层对象将自行车道图层和 或特定于自行车的叠加层渲染到公共图层中 当请求骑行模式行驶方向时 默认情况下会在 DirectionsRenderer 中返回该
  • 使用 jQuery 即时创建

    我想在基于 AJAX 响应的盒子中动态构建 s 即如果responseText是3 我想构建3个选项
  • 本地化资源包中的枚举值

    我的 JSF 应用程序中的 i18n 枚举有问题 当我开始时 我有枚举 其中定义了文本 但现在 我在枚举中将密钥绑定到消息包 我的枚举示例之一 public enum OrderStatus implements CustomEnum PE
  • 定期将大数据 (json) 导入 Firebase

    我们面临的情况是 我们必须定期更新 firebase 中的大量数据 大约 5 个 Mio 记录 目前我们有一些大小约为 1 GB 的 json 文件 作为现有的第三方解决方案 here and here 存在一些可靠性问题 每个对象导入对象
  • 删除 XML 标签及其内容之间的任何内容

    我需要删除 XML 标记之间的任何内容 尤其是空格和换行符 例如 从以下位置删除空格和换行符 节点 gt n to get 节点 gt 这并不是为了手动解析 XML 而是在 XML 数据被工具解析之前准备好 更具体地说 我正在使用 Hpri
  • 不支持 URL 格式

    我正在使用 File OpenRead 方法读取文件 我给出这个路径 http localhost 10001 MyFiles folder abc png 我也尝试过这个 但没有运气 http localhost 10001 MyFile
  • 即使我删除了 Google 表单的所有脚本后,我仍然收到“Google Apps 脚本失败摘要:脚本”错误消息

    我最近尝试使用 GoogleForms 中的脚本将所有结果通过电子邮件发送到我的帐户 但它不起作用并不断向我发送错误电子邮件 所以我删除了所有脚本 为我创建的所有 GoogleForms 创建了新的电子表格 但我仍然收到这些错误电子邮件 看
  • 如何在 Matlab 中将 Kinect 原始深度信息转换为米?

    我在这里做了一些研究来理解这个主题 但没有取得好的结果 我正在使用 Kinect for Windows 和 Kinect SDK 1 7 我正在使用 matlab 来处理原始深度图信息 首先 我使用这种方法 https stackover
  • 匿名类可以完全不可变吗?

    在 Java Concurrency In Practice 一书中 有一个几乎不可变对象的示例 如果未正确发布 该对象将面临失败的风险 Taken from Java Concurrency In Practice p 51 Listin
  • 在 Angular JS 中传递值

    我是 Angular JS 的新手 我在index html 页面中创建了一个表单 当我在表单中填写详细信息并按提交时 它应该重定向到details html 页面 我可以在哪里显示表格上填写的详细信息 HTML div class for
  • Obj-C,当“self”未设置为“[(super or self) init...]”的结果时使用的实例变量

    我知道不久前我问过类似的问题 但我仍然有点不确定 同样的事情在很多地方都发生过 当 self 未设置为 super or self init 的结果时使用的实例变量 A id initWithCoder NSCoder decoder if
  • Eclemma 不提供报告导出选项

    我确信我犯了某种菜鸟错误 但我现在第一次使用 EclEmma 尽管检查了大量指南 但仍无法弄清楚如何导出我的覆盖率报告 作为参考 这是在 Windows 8 x64 上并使用 Eclipse Kepler 如果您需要更多信息 请告诉我 我可
  • Android平台上使用altbeacon库对Eddystone信标进行后台监控

    是否有后台监控Eddystone在android平台上使用altbeacon库的beacon可能吗 我怎样才能实现它 以下是我可以在应用程序启动时检测具有指定 UUID 的信标的代码 但我想在应用程序未运行时实现相同的目标 public c
  • 将 JAXB 和 JAXWS 组合起来以生成导入的 XML 模式

    使用 wsimport 时 如何为 WSDL 中导入的 XSD 指定 JAXB 绑定 我尝试了以下绑定 这会导致错误 xs element name isFoobar 的 XPath 计算导致空目标节点
  • 实现 ApplicationContextAware - ApplicationContext 为 NULL

    我正在编写一个 Tomcat 应用程序 它充当一些内部服务的代理 我已将 Spring 项目从混合 XML 和基于注释的配置切换为 Java 和基于注释的配置 在切换配置风格之前 该应用程序运行良好 现在我有两个问题 在我的两个过滤器中执行