我正在试验这个官方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如何知道它应该使用参数运行构造函数?是因为它是唯一的构造函数吗?
我正在尝试使用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
从春季启动教程: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
我遇到了两种不同的类型,可以根据一些参数来运行我的活动.第一个是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,这是否意味着如果再次重新创建活动,我可以获得原始包?(我想这个问题会根据其他答案回答)
我尝试使用 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) android ×2
spring-boot ×2
android-collapsingtoolbarlayout ×1
autowired ×1
bash ×1
jq ×1
linux ×1
rabbitmq ×1
shell ×1
spring ×1
spring-amqp ×1