小编win*_*ter的帖子

Spring在没有@Autowired批注的构造函数中注入依赖项

我正在试验这个官方Spring 教程中的示例,并且依赖于此代码:https:
//github.com/spring-guides/gs-async-method/tree/master/complete

如果你看一下AppRunner.java 类的代码,我有两个问题:

1)当服务器启动时,如果我在这个类的构造函数中放置一个断点,就像在构造函数中一样,Spring提供了GitHubLookupService,使用了已配置的@Service bean.但是,@Autowired构造函数上没有注释,那么在世界中如何使用正确的依赖项调用此构造函数?它应该是null.

它是Spring Boot的自动假设吗?
Spring是否看到"私有字段+构造函数参数,它假设它应该寻找合适的bean?
Spring Framework还是Spring引导
我错过了什么?

2)我记得,为bean/service等提供默认构造函数是可以的.为什么这个类(AppRunner)没有默认构造函数?Spring如何知道它应该使用参数运行构造函数?是因为它是唯一的构造函数吗?

spring dependency-injection autowired spring-boot

48
推荐指数
2
解决办法
3万
查看次数

滚动时CollapsingToolbarLayout并隐藏工具栏

我正在尝试使用CoordinatorLayout和CollapsingToolbarLayout创建一些组合布局.

在第一个状态,当我们在最顶层的页面上,并且还没有滚动时,我希望工具栏如下所示(是的,我做到了):

在此输入图像描述

在第二种状态下,当开始向下滚动时,图像和工具栏应该消失,如下所示(仅显示选项卡):

在此输入图像描述

在最后一个状态,一旦我在列表中的某个点(但不是列表的顶部),我想开始向上滚动,一旦我开始向上滚动,我想要工具栏(而不是图片中消耗的工具栏)开始哇哇,如下图所示(如果没有到达列表的顶部,图像将不会显示,只有工具栏):

在此输入图像描述

我能够实现第一个状态,但另一个状态是有问题的,一旦工具栏在CollapsingToolbarLayout中实现,我在CollapsingToolbarLayout组件之外可以用它做的灵活性不明确.我无法隐藏工具栏,如果我这样做,那么只有在我到达顶部时它才会显示.

无论如何,我当前的XML(如下所示)处于第一张图片实现的状态,但是一旦我开始向下滚动,工具栏就会停留在顶部并且不会隐藏.注意:我必须告诉工具栏保持"pin",因为如果我没有,那么工具栏内的信息就会消失,只有一个空的工具栏会显示(这是另一个帖子,但是知道为什么会发生这种情况仍然很有趣?) .

这是我当前的xml:

    <android.support.design.widget.CoordinatorLayout
    android:id="@+id/benefit_coordinator_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar_material_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/main.collapsing"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            >

            <include
                android:id="@+id/toolbar_search_container"
                layout="@layout/search_box"
                android:layout_height="192dp"
                android:layout_width="match_parent"
                app:layout_collapseMode="parallax"

                />

            <include
                android:id="@+id/toolbar_benefit"
                layout="@layout/toolbar_main"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:contentScrim="?attr/colorPrimary"

                />

        </android.support.design.widget.CollapsingToolbarLayout>

        <android.support.design.widget.TabLayout
            android:id="@+id/benefit_tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/primaryColor"
            app:tabIndicatorColor="@color/accentColor"
            app:tabSelectedTextColor="@android:color/white"
            app:tabTextColor="@android:color/black"
            app:tabIndicatorHeight="4dp" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/benefit_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
    <include
        layout="@layout/floating_btn_benefits"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_margin="16dp"
        />
</android.support.design.widget.CoordinatorLayou
Run Code Online (Sandbox Code Playgroud)

android coordinator-layout android-coordinatorlayout android-collapsingtoolbarlayout

21
推荐指数
1
解决办法
2万
查看次数

多个带弹簧启动的Rabbitmq队列

从春季启动教程:https: //spring.io/guides/gs/messaging-rabbitmq/

他们给出了仅创建1个队列和1个队列的示例,但是,如果我希望能够创建多于1个队列,该怎么办?怎么可能?

显然,我不能只创建两次相同的bean:

@Bean
Queue queue() {
    return new Queue(queueNameAAA, false);
}

@Bean
Queue queue() {
    return new Queue(queueNameBBB, false);
}
Run Code Online (Sandbox Code Playgroud)

你不能两次创建相同的bean,它会使模糊不清.

rabbitmq spring-amqp spring-boot rabbitmq-exchange spring-rabbitmq

11
推荐指数
1
解决办法
6169
查看次数

savedInstanceState vs getIntent().getExtras()

我遇到了两种不同的类型,可以根据一些参数来运行我的活动.第一个是savedInstanceState,另一个是getIntent.getExtras()

Q1)所以我不明白的是,一旦我将bundle传递给我的活动然后启动它,它应该有捆绑.但是,如果由于某种原因再次重新创建活动,它应该重新拥有相同的包.(我对吗?)

Q2)基于Q1是真的事实,以及我不能只在活动已经开始时覆盖捆绑的事实,我想如果由于某种原因在我已经开始的Activity中,我想要改变一些params捆绑,我应该创建一些活动字段,并在我的活动生活中使用这些字段.如果由于某种原因重新创建我的活动,则覆盖saveInstanseState以保存新字段.这是真的吗?

Q3)基于以上事实都是正确的事实,在onCreate()中,Android世界中的每个活动都需要像这样开始:

if (savedInstanceState != null) {
    mType = savedInstanceState.getInt("some_val1");
    mCardId = savedInstanceState.getLong("some_val2");
    mQuery =  savedInstanceState.getString("some_val3");
    mCategory = savedInstanceState.getLong("some_val4");;
} else {
    mType = getIntent().getExtras().getInt("some_val1");
    mCardId  = getIntent().getExtras().getLong("some_val2");
    mQuery = getIntent().getExtras().getString("some_val3");
    mCategory = getIntent().getExtras().getString("some_val4");
}
Run Code Online (Sandbox Code Playgroud)

Q4)假设onSaveInstanceState被调用并且保存的值与启动活动的原始包(getIntent.getExtras)不同,如果再次重新创建活动,这是否意味着saveInstanceState与getIntent.getExtras()或它们不同现在一样吗?(如果它们是相同的,那么上面代码中的if/else没有真正含义,因为它是相同的!).

Q5)如果我没有覆盖onSaveInstanceState但是当我创建活动时我将它传递给Bundle,这是否意味着如果再次重新创建活动,我可以获得原始包?(我想这个问题会根据其他答案回答)

android android-lifecycle android-activity

9
推荐指数
1
解决办法
3929
查看次数

jq 带单引号的 bash 脚本

我尝试使用 bash 运行以下脚本:

#!/bin/bash

myvar="data1"
data='[
  {
    "resource_name": "data1.something",
    "resource_type": "Topic"
  },
  {
    "resource_name": "data2.something",
    "resource_type": "Topic"
  }
]'
query=$(echo ".[] | select((.resource_type==\"Topic\") and (.resource_name | startswith(\"${myvar}\") | not))")
echo ${data} | jq ${query}
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为行:

echo ${data} | jq ${query}
Run Code Online (Sandbox Code Playgroud)

但如果我在 zsh 中运行相同的脚本,它就会起作用。并给我以下错误:

jq: error: Could not open file |: No such file or directory

jq: error: Could not open file select((.resource_type=="Topic"): No such file or directory
jq: error: Could not open file and: No such file or directory
jq: …
Run Code Online (Sandbox Code Playgroud)

linux bash shell jq

4
推荐指数
1
解决办法
682
查看次数