Bil*_*ory 11 java spring jstl inversion-of-control
我有一堆使用spring托管bean的java自定义标签..由于我无法找到注入自定义标记的方法,我创建了一个帮助类,为所有spring bean对象提供静态方法"getTheObjectINeedBean()"需要..我根本不喜欢这种方法.
我真的希望能够将spring托管bean注入自定义标记
有办法吗?就我的研究而言,我知道没有办法做到这一点,因为自定义标签是容器管理的
谢谢,
比利
小智 8
为了扩展@ Bozho的帖子,我得到了这样的工作:(在Spring 3.0中没有我能找到的ApplicationContextUtils)
public class LocationTag extends RequestContextAwareTag {
@Autowired
PathComponent path;
...
@Override
protected int doStartTagInternal() throws Exception {
if (path == null) {
log.debug("Autowiring the bean");
WebApplicationContext wac = getRequestContext().getWebApplicationContext();
AutowireCapableBeanFactory acbf = wac.getAutowireCapableBeanFactory();
acbf.autowireBean(this);
}
return SKIP_BODY;
}
}
Run Code Online (Sandbox Code Playgroud)
你是对的,没有一种简单的方法可以在jstl标签中使用依赖注入,因为它们不是由spring管理的,也不可能.但是(至少)有两种解决方法:
@Configurable
- aspectJ允许您在加载时/编译时插入编织器,这样即使没有弹簧实例化的对象也可以弹出.看到这里
您可以为项目创建基本标记类,并init(..)
从每个doStartTag(..)
方法调用方法.在那里,你可以得到ServletContext
从pageContext
,并因此获得弹簧ApplicationContext
(通过ApplicationContextUtils
).然后:
AutowireCapableBeanFactory factory = appCtx.getAutowireCapableBeanFactory();
factory.autowireBean(this);
Run Code Online (Sandbox Code Playgroud)这些选项都不是完美的,因为它们需要一些额外的代码或一些"黑魔法"
归档时间: |
|
查看次数: |
7240 次 |
最近记录: |