首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring:为什么Bean在注入过程中解析为null?

Spring:为什么Bean在注入过程中解析为null?
EN

Stack Overflow用户
提问于 2017-08-21 14:25:01
回答 1查看 536关注 0票数 0

同事们,我有一颗豆子:

代码语言:javascript
运行
复制
    @Component
    public class BasicAuthAuthorizationInterceptor extends SoapHeaderInterceptor {

        private static final Logger log = LoggerFactory.getLogger(BasicAuthAuthorizationInterceptor.class);

        @Value("#{${accepted.username.pass1}}")
        private Map<String,String> authMap;

        @Override
        public void handleMessage(Message message) throws Fault {
            AuthorizationPolicy policy = message.get(AuthorizationPolicy.class);

            if (policy == null) {
                sendErrorResponse(message, HttpURLConnection.HTTP_UNAUTHORIZED);
                return;
            }

            String username = policy.getUserName();
            String password = policy.getPassword();

            // CHECK USERNAME AND PASSWORD
            if (!checkLogin(username,password)) {

                 sendErrorResponse(message, HttpURLConnection.HTTP_FORBIDDEN);
            }
        }

        public boolean checkLogin(String username, String password) {
            MapUtils.debugPrint(System.out, "Map: " , authMap);

            if (authMap.containsKey(username.trim()) && password.trim().equals(authMap.get(username).trim())) {
                return true;
            }
            return false;
        }
   //some other methods
    }

当我运行测试用例时:

代码语言:javascript
运行
复制
@RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(classes = SpumConfig.class)
public class BasicAuthAuthorizationInterceptorTest {

    private static final Logger log = LoggerFactory.getLogger(BasicAuthAuthorizationInterceptorTest.class);

    @Autowired
    BasicAuthAuthorizationInterceptor basicAuthAuthorizationInterceptor;
    @Test
    public void handleMessage() throws Exception {
       log.info(String.valueOf(basicAuthAuthorizationInterceptor.checkLogin("abc", "321")));
    }}

我接收到trueMapUtils.debugPrint方法打印所有键和值:

Map:={ abc = 325 java.lang.String cda = 322 java.lang.String sss = Bas3 java.lang.String } java.util.Collections$UnmodifiableMap

但是当我编译一个jar文件时,运行应用程序,而不是调用我收到的web服务。

代码语言:javascript
运行
复制
Map:  = null

为什么会发生这种情况,以及如何正确地将映射注入BasicAuthAuthorizationInterceptor

更新

代码语言:javascript
运行
复制
    @Configuration
    @ComponentScan(basePackages = {"com.comp.spum"})
    @PropertySource("classpath:spum-${env}.properties")
    public class spumConfig {
      private static final Logger log = LoggerFactory.getLogger(spumConfig.class);

        @Autowired
        Environment environment;
        @Autowired
        spumCommons spumCommons;


  @Bean
    public String appProps() {
        log.info("test.db.url = " + environment.getProperty("test.db.url"));
        return null;
    }

    @Bean public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer()
    { return new PropertySourcesPlaceholderConfigurer();}

    }

更新2

根据日志属性正在解析并创建了basicAuthAuthorizationInterceptor

2017-08-22 10:25:00,573主要调试o.s.b.f.annotation.InjectionMetadata -处理注入的bean元素“basicAuthAuthorizationInterceptor”:AutowiredFieldElement for java.util.Map java.util.Map 2017-08-22 10:25:00,574主跟踪o.s.c.e.PropertySourcesPropertyResolver -搜索environmentProperties 2017-08-22 10:25:00,574主跟踪o.s.c.e.PropertySourcesPropertyResolver -搜索environmentProperties 2017-22 10:25:00,574主跟踪o.s.c.e.PropertySourcesPropertyResolver-搜索对于systemProperties 2017-08-22 10:25:00,574主跟踪o.s.c.e.PropertySourcesPropertyResolver -搜索systemEnvironment 2017中的键'accepted.username.pass1‘-08-22 10:25:00,574主跟踪o.s.c.e.PropertySourcesPropertyResolver -在[类路径资源spum-dev.properties] 2017-22 10:25:00,574主调试o.s.c.e.PropertySourcesPropertyResolver中搜索密钥'accepted.username.pass1’[类路径资源spum-dev.properties]中的'accepted.username.pass1‘类型为String 2017-08-22 10:25:00,574主调试o.s.c.e.PropertySourcesPropertyResolver -在environmentProperties中找到键'accepted.username.pass1’,类型为String 2017-22 10:25:00,574主跟踪o.s.util.PropertyPlaceholderHelper -解析占位符accepted.username.pass1 'accepted.username.pass1‘08-22 10:25:00595主调试o.s.b.f.s.DefaultListableBeanFactory -完成了bean 'basicAuthAuthorizationInterceptor’实例的创建。

EN

回答 1

Stack Overflow用户

发布于 2017-08-22 00:28:22

很可能jar一开始就没有找到属性文件的正确路径。请先验证属性文件的路径。

然后使用spring‘PropertySourcesPlaceholderConfigurer添加正确的路径。在部署应用程序时,可以验证应用程序是否获取服务器日志中的属性文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45799590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档