我正在研究Spring Core认证,我对Spring如何处理bean生命周期,特别是bean后处理器有一些疑问.
所以我有这个架构:

这对我来说非常清楚它意味着什么:
以下步骤发生在" 加载Bean定义"阶段:
的@Configuration类被处理和/或@Components被扫描和/或XML文件进行解析.
Bean定义添加到BeanFactory(每个都在其id下编入索引)
调用了特殊BeanFactoryPostProcessor bean,它可以修改任何bean的定义(例如,对于property-placeholder值替换).
然后在bean创建阶段执行以下步骤:
默认情况下,每个bean都会被急切地实例化(以正确的顺序创建并注入其依赖项).
在依赖注入之后,每个bean经历后处理阶段,其中可以进行进一步的配置和初始化.
在后处理之后,bean被完全初始化并准备好使用(由id跟踪直到上下文被销毁)
好的,这对我来说非常清楚,我也知道有两种类型的bean后处理器:
初始化器:如果指示(即@PostConstruct)初始化bean.
以及所有其余的:允许进行额外配置,并且可以在初始化步骤之前或之后运行
我发布这张幻灯片:

所以我很清楚初始化器 bean后处理器是什么(它们是使用@PostContruct注释注释的方法,并且在setter方法之后立即自动调用(因此在依赖注入之后),我知道我可以使用执行一些初始化批处理(如上例所示填充缓存).
但究竟什么代表了其他bean后处理器?当我们说在初始化阶段之前或之后执行这些步骤时,我们的意思是什么?
因此我的bean被实例化并且它的依赖项被注入,因此初始化阶段就完成了(通过执行@PostContruct注释方法).在初始化阶段之前使用Bean Post处理器是什么意思?这意味着它发生在@PostContruct注释方法执行之前?这是否意味着它可能在依赖注入之前发生(在调用setter方法之前)?
当我们说它是在初始化步骤之后执行时,我们究竟是什么意思.这意味着它会在执行@PostContruct注释方法之后发生,或者是什么?
我可以很容易地想到为什么我需要一个@PostContruct注释方法,但我无法想象另一种bean后处理器的典型例子,你能告诉我一些典型的例子吗?
我需要在一行 js 代码行中创建<a href="http://someurl.com"></a>元素
这不起作用:
var gg = document.createElement("a", {href : "http://someurl.com"})
这导致: <a is="[object Object]"></a>
思想 MDN 说:
var element = document.createElement(tagName[, options]);
options 是一个可选的 ElementCreationOptions 对象。如果此对象已定义并具有is属性,则is所创建元素的属性将使用此属性的值进行初始化。如果对象没有is属性,则值为空。
https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement
这个 ElementCreationOptions 对象是某种奇异的对象吗?我围绕这个对象尝试了许多不同的组合,但没有任何效果,结果总是我看到那个奇怪的is属性!我还在规范中找到了它:https : //www.w3.org/TR/custom-elements/#attr-is但不知道它实际上是如何工作的。
ps:这也不起作用:
var gg = document.createElement("a").setAttribute("href" , "someurl.com")
导致未定义。
下面,我正在渲染<App/>带有子组件的组件作为<Input/>组件数组。我使用“添加新”按钮添加了一些输入。我可以添加输入文本组件。但是,当我在文本中输入值时,它没有显示。我无法修改状态数组中的对象,因为索引在setData函数中显示为“-1”。因此,当我们在文本框中键入内容时,值不会显示。请让我知道为什么state当[]我在函数中访问时setData。
function Input(props)
{
return (
<div>
<label htmlFor='variable'>Name</label>
<input id='variable'
type='text'
value={props.value}
onChange={(e) => props.setData(props.id, e.target.value)} />
</div>
)
}
function App()
{
let [state, setState] = React.useState([])
let [inputs, setInputs] = React.useState([])
let setData = ((id, value) =>
{
console.log(state); // prints []
let index = state.findIndex(ele => ele.key === id);
console.log(index); // prints -1
if (!(index === -1))
{
setState(state =>
{
state[idx]["value"] = value; …Run Code Online (Sandbox Code Playgroud)