java – 可自定义@Autowired
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 可自定义@Autowired,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1616字,纯文字阅读大概需要3分钟。
内容图文
![java – 可自定义@Autowired](/upload/InfoBanner/zyjiaocheng/731/1049a53c5d04468d9d35bb56f958de82.jpg)
假设我有一个带注释的bean属性设置器,如下所示:
public class Foo {
...
@Autowired
public void setBar(Bar bar) {
...
}
Springframework将像往常一样查找匹配的Bar属性.但是,我想拦截默认的bean解析过程并自己添加一些“魔法”.我想介绍一个像这样的解析器:
public interface SomeResolverInterface<T> {
public T resolve(Class<T> beanClass);
}
public class BarResolver implements SomeResolverInterface<Bar> {
@Override
public Bar resolve(Class<Bar> beanClass) {
if(someCondition) {
return someBean;
} else {
return anotherBean;
}
}
...
我知道我总是可以引入某种包装bean并将解析逻辑移到这里但是我更喜欢使用上述解析器的更通用的方法来使Foo完全独立于解析逻辑.
Springframework中是否有办法实现这样的目标?
解决方法:
根据您的描述,您似乎只需要在启动时执行其他逻辑(自动装配).有几种方法可以解决这个问题(从最差到最好):
> AOP – 糟糕的主意,通过拦截每个调用来引入运行时开销
>自定义范围 – 请参阅:Custom spring scopes?也适用于运行时,也是一个坏主意
> @Profile – 定义两个匹配的bean,并仅根据活动的配置文件启用一个.非常干净,只在启动时引入开销
> @Configuration – 在Java中定义bean有一个额外的好处,就是可以完全控制它们的创建方式:
@Configuration
public class Config {
@Autowired
private Bar someBean;
@Autowired
private Bar anotherBean;
@Bean
@Primary
public Bar primaryBean() {
if(someCondition) {
return someBean;
} else {
return anotherBean;
}
}
}
正如您在本例中所看到的,我们有三个Bar类型的bean:s??omeBean,anotherBean和primaryBean.前两个也可以使用@Bean配置,也可以使用@Service进行组件扫描.但是为了使自动装配成为可能,最后一个primaryBean被标记为@Primary.这样,它将优于其他两个.
这是我推荐的解决方案,因为解析逻辑是干净,可维护和可读的.恕我直言,这是基于Java的@Configuration真正闪耀的情况.
内容总结
以上是互联网集市为您收集整理的java – 可自定义@Autowired全部内容,希望文章能够帮你解决java – 可自定义@Autowired所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。