时间:2021-05-20
若干年前在使用SpringMVC的时候,发现springMVC可以把HttpSession,HttpRequest组件化注入:
@AutowiredHttpSession session;@AutowiredHttpRequest httpRequest;于是花了30分钟追踪了相关的源代码彻底摸清其原理,并且决定将用户(User/Principle)也组件化(尽管当时工作处于极其忙碌的状态,也忍不住去研究)。
方法如下:
1. 定义IPrincipal(IUser)接口
2. 实现PrincipalObjectFactory
3. 在spring的上下文中注册依赖处理器
只需要以上步骤,即可使用@Autowired在业务代码中注入IPrincipal(IUser),并且保证其线程安全。
原理:
阅读spring源码会发现,spring在注入接口时如果发现没有接口的实现类,就会从ResolvableDependency中寻找相关的依赖解决器。
如果注册了相关的依赖解决器,会给此接口注入一个代理类,这个代理类的target就是ObjectFactory#getObject,在这里就可实现你的IPrincipal(IUser)获取了。
总结
1 使用这个方式将IPrincipal(IUser)组件化,而不是通过工具类的方式去获取。这样的方式充分体现了spring的依赖注入的思想,并且系统耦合性也降低不少。
2 即使在spring上下文中注入ObjectFactory,spring并不会自动注册,需要手动注册。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了vue使用自定义事件的表单输入组件用法。分享给大家供大家参考,具体如下:自定义事件可以用来创建自定义的表单输入组件,使用v-model来进行数据双
组件—滑块基础用法默认自定义初始值隐藏Tooltip格式化Tooltip禁用exportdefault{data(){return{value1:0,value
组件—回到顶部基础用法Scrolldowntoseethebottom-rightbutton.自定义显示内容Scrolldowntoseethebottom-
前言:前面几篇讲了自定义控件绘制原理Android自定义控件基本原理详解(一),Android自定义控件之自定义属性(二),Android自定义控件之自定义组合
组件—警告基本用法主题自定义关闭按钮exportdefault{methods:{hello(){alert('HelloWorld!');}}}带有icone