Flask接口签名sign原理与实例代码浅析
237
2023-02-06
详解Spring Bean 之间的特殊关系
在 Spring 容器中,两个 Bean 之间除了通过 建立依赖关系外,还存在着一些特殊关系。
1 继承
在面向对象的编程原理中,当多个类拥有相同的方法和属性时,则可以引入父类用于消除重复的代码 。 而在 Spring 容器中,如果多个 Bean 存在相同的配置信息,我们可以定义一个父 Bean ,这样子 Bean 将会自动继承父 Bean 的配置信息 。
p:name="面纱" abstract="true">
p:name="面纱" abstract="true">
p:press="重庆出版社" parent="abstractBook"/> p:press="上海译文出版社" parent="abstractBook"/> 一般情况下,父 Bean 的功能是简化子 Bean 的配置,所以设置为抽象类(abstract="true");如果这里没有把父 Bean 设置为抽象类,那么 Spring 容器会nnzfATpV实例化父 Bean 。 2 前置依赖 一般情况下,使用 来建立 Bean 之间的依赖关系, Spring 容器负责管理这些关系,当实例化一个 Bean 时,容器保证该 Bean 所依赖的 Bean 都已经完成了初始化工作。 但在某些情况下,Bean 之间的依赖关系并没有那么明显。 假设这样一种场景,某系统设置了一些系统参数(如密码有效期、是否开启监控等),这些启动参数用来控制系统的运行逻辑,我们使用一个 Setting 类来表示这些参数: public class Settings { /** * 密码过期时间(单位:天) */ public static int PASS_TIMEOUT = 30; /** * 是否开启监控 */ public static boolean IS_MONITOR = false; } 在此,我们为这些参数设置了默认值。系统还有一个管理后台,管理员可以通过这个后台调整这些系统参数并保存到数据库中。所以应用启动时,需要从数据库中加载这些系统参数: public class System { public System() { init(); } /** * 初始化 */ private void init() { //假设这些值来源于数据库 Settings.PASS_TIMEOUT = 20; Settings.IS_MONITOR = true; } } 系统有一个密码过期管理器,它会根据系统参数中的【密码过期的天数】,来创建检测密码是否过期的定时任务: public class PassManager { int timeout; public PassManager() { timeout = Settings.PASS_TIMEOUT; timerTask(); } /** * 检测密码是否过期的定时任务 */ private void timerTask() { } public int getTimeout() { return timeout; } } 虽然 PassManager 并没有直接依赖于 Settings,但从逻辑上来看,PassManager 希望 System 加载初始化系统参数后再启动。 Spring 中可以通过 depends-on 属性显式地指定 Bean 的前置依赖 Bean, 保证这个 Bean 在实例化之前,它的前置依赖 Bean 已经加载完毕。 depends-on="system"/> 如果前置依赖于多个 Bean ,那么可以通过逗号、空格或分号的方式来配置 Bean 名称 。 3 引用 ID 假设一个 Bean 需要引用另一个 Bean 的 id 值(beanName),这一般用于在运行期间在 Bean 中通过 getBean(beanName) 方法获取另一个 Bean 的情境。 可以这样配置: p:authorId="author"/> Book 中新增 authorIhttp://d 属性: /** * author Bean 的 ID */ private String authorId; 虽然可以以这种字面值的形式进行设置,但两者之间并没有建立真正的引用关系。所以只有等到具体调用时才会发现配置错误。 Spring 提供了 > 如果配置发生错误,Spring 容器启动时就会抛出 BeanDefinitionStoreException,而且 IDE 的XML 分析器也会提前发现引用错误,所以推荐使用 总结 以上所述是给大家介绍的Spring Bean 之间的特殊关系,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,会及时回复大家的!
p:press="重庆出版社" parent="abstractBook"/>
p:press="上海译文出版社" parent="abstractBook"/> 一般情况下,父 Bean 的功能是简化子 Bean 的配置,所以设置为抽象类(abstract="true");如果这里没有把父 Bean 设置为抽象类,那么 Spring 容器会nnzfATpV实例化父 Bean 。 2 前置依赖 一般情况下,使用 来建立 Bean 之间的依赖关系, Spring 容器负责管理这些关系,当实例化一个 Bean 时,容器保证该 Bean 所依赖的 Bean 都已经完成了初始化工作。 但在某些情况下,Bean 之间的依赖关系并没有那么明显。 假设这样一种场景,某系统设置了一些系统参数(如密码有效期、是否开启监控等),这些启动参数用来控制系统的运行逻辑,我们使用一个 Setting 类来表示这些参数: public class Settings { /** * 密码过期时间(单位:天) */ public static int PASS_TIMEOUT = 30; /** * 是否开启监控 */ public static boolean IS_MONITOR = false; } 在此,我们为这些参数设置了默认值。系统还有一个管理后台,管理员可以通过这个后台调整这些系统参数并保存到数据库中。所以应用启动时,需要从数据库中加载这些系统参数: public class System { public System() { init(); } /** * 初始化 */ private void init() { //假设这些值来源于数据库 Settings.PASS_TIMEOUT = 20; Settings.IS_MONITOR = true; } } 系统有一个密码过期管理器,它会根据系统参数中的【密码过期的天数】,来创建检测密码是否过期的定时任务: public class PassManager { int timeout; public PassManager() { timeout = Settings.PASS_TIMEOUT; timerTask(); } /** * 检测密码是否过期的定时任务 */ private void timerTask() { } public int getTimeout() { return timeout; } } 虽然 PassManager 并没有直接依赖于 Settings,但从逻辑上来看,PassManager 希望 System 加载初始化系统参数后再启动。 Spring 中可以通过 depends-on 属性显式地指定 Bean 的前置依赖 Bean, 保证这个 Bean 在实例化之前,它的前置依赖 Bean 已经加载完毕。 depends-on="system"/> 如果前置依赖于多个 Bean ,那么可以通过逗号、空格或分号的方式来配置 Bean 名称 。 3 引用 ID 假设一个 Bean 需要引用另一个 Bean 的 id 值(beanName),这一般用于在运行期间在 Bean 中通过 getBean(beanName) 方法获取另一个 Bean 的情境。 可以这样配置: p:authorId="author"/> Book 中新增 authorIhttp://d 属性: /** * author Bean 的 ID */ private String authorId; 虽然可以以这种字面值的形式进行设置,但两者之间并没有建立真正的引用关系。所以只有等到具体调用时才会发现配置错误。 Spring 提供了 > 如果配置发生错误,Spring 容器启动时就会抛出 BeanDefinitionStoreException,而且 IDE 的XML 分析器也会提前发现引用错误,所以推荐使用 总结 以上所述是给大家介绍的Spring Bean 之间的特殊关系,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,会及时回复大家的!
p:press="上海译文出版社" parent="abstractBook"/>
一般情况下,父 Bean 的功能是简化子 Bean 的配置,所以设置为抽象类(abstract="true");如果这里没有把父 Bean 设置为抽象类,那么 Spring 容器会nnzfATpV实例化父 Bean 。
2 前置依赖
一般情况下,使用 来建立 Bean 之间的依赖关系, Spring 容器负责管理这些关系,当实例化一个 Bean 时,容器保证该 Bean 所依赖的 Bean 都已经完成了初始化工作。
但在某些情况下,Bean 之间的依赖关系并没有那么明显。
假设这样一种场景,某系统设置了一些系统参数(如密码有效期、是否开启监控等),这些启动参数用来控制系统的运行逻辑,我们使用一个 Setting 类来表示这些参数:
public class Settings {
/**
* 密码过期时间(单位:天)
*/
public static int PASS_TIMEOUT = 30;
/**
* 是否开启监控
*/
public static boolean IS_MONITOR = false;
}
在此,我们为这些参数设置了默认值。系统还有一个管理后台,管理员可以通过这个后台调整这些系统参数并保存到数据库中。所以应用启动时,需要从数据库中加载这些系统参数:
public class System {
public System() {
init();
}
/**
* 初始化
*/
private void init() {
//假设这些值来源于数据库
Settings.PASS_TIMEOUT = 20;
Settings.IS_MONITOR = true;
}
}
系统有一个密码过期管理器,它会根据系统参数中的【密码过期的天数】,来创建检测密码是否过期的定时任务:
public class PassManager {
int timeout;
public PassManager() {
timeout = Settings.PASS_TIMEOUT;
timerTask();
}
/**
* 检测密码是否过期的定时任务
*/
private void timerTask() {
}
public int getTimeout() {
return timeout;
}
}
虽然 PassManager 并没有直接依赖于 Settings,但从逻辑上来看,PassManager 希望 System 加载初始化系统参数后再启动。
Spring 中可以通过 depends-on 属性显式地指定 Bean 的前置依赖 Bean, 保证这个 Bean 在实例化之前,它的前置依赖 Bean 已经加载完毕。
depends-on="system"/> 如果前置依赖于多个 Bean ,那么可以通过逗号、空格或分号的方式来配置 Bean 名称 。 3 引用 ID 假设一个 Bean 需要引用另一个 Bean 的 id 值(beanName),这一般用于在运行期间在 Bean 中通过 getBean(beanName) 方法获取另一个 Bean 的情境。 可以这样配置: p:authorId="author"/> Book 中新增 authorIhttp://d 属性: /** * author Bean 的 ID */ private String authorId; 虽然可以以这种字面值的形式进行设置,但两者之间并没有建立真正的引用关系。所以只有等到具体调用时才会发现配置错误。 Spring 提供了 > 如果配置发生错误,Spring 容器启动时就会抛出 BeanDefinitionStoreException,而且 IDE 的XML 分析器也会提前发现引用错误,所以推荐使用 总结 以上所述是给大家介绍的Spring Bean 之间的特殊关系,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,会及时回复大家的!
depends-on="system"/>
如果前置依赖于多个 Bean ,那么可以通过逗号、空格或分号的方式来配置 Bean 名称 。
3 引用 ID
假设一个 Bean 需要引用另一个 Bean 的 id 值(beanName),这一般用于在运行期间在 Bean 中通过 getBean(beanName) 方法获取另一个 Bean 的情境。
可以这样配置:
p:authorId="author"/> Book 中新增 authorIhttp://d 属性: /** * author Bean 的 ID */ private String authorId; 虽然可以以这种字面值的形式进行设置,但两者之间并没有建立真正的引用关系。所以只有等到具体调用时才会发现配置错误。 Spring 提供了 > 如果配置发生错误,Spring 容器启动时就会抛出 BeanDefinitionStoreException,而且 IDE 的XML 分析器也会提前发现引用错误,所以推荐使用 总结 以上所述是给大家介绍的Spring Bean 之间的特殊关系,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,会及时回复大家的!
p:authorId="author"/>
Book 中新增 authorIhttp://d 属性:
/**
* author Bean 的 ID
*/
private String authorId;
虽然可以以这种字面值的形式进行设置,但两者之间并没有建立真正的引用关系。所以只有等到具体调用时才会发现配置错误。
Spring 提供了
>
>
如果配置发生错误,Spring 容器启动时就会抛出 BeanDefinitionStoreException,而且 IDE 的XML 分析器也会提前发现引用错误,所以推荐使用
总结
以上所述是给大家介绍的Spring Bean 之间的特殊关系,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,会及时回复大家的!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~