使用Interceptor
类型注入所需的依赖项在技术上是否是一种良好且可接受的做法。例如:
public @interface Inject {
public Class thisType();
}
public class InjectionInterceptor implements HandlerInterceptor {
@Override
public bool preHandle(HttpServletRequest hsr, HttpServletResponse hsr1, Object o) {
HandlerMethod handlerMethod = (HandlerMethod) o;
Class type = handlerMethod.getBeanType();
Annotation[] annotations = type.getAnnotationsByType(Inject.class);
for(Annotation annotation: annotations){
Inject inject = (inject) annotation;
for(Field field :type.getDeclaredFields()){
if(field.getType().equals(inject.thisType())){
field.setAccessible(true);
field.set(handlerMethod.getBean(), Services.find(inject.thisType()));
}
}
....
return true;
}
...
}
答案 0 :(得分:1)
一个bean可以有4个范围。
单件 将只管理bean的一个共享实例,并且对具有与该bean定义匹配的id或id的bean的所有请求将导致Spring容器返回一个特定的bean实例。
这是bean的默认范围。
原型 当请求具有指定标识的bean时,容器返回新实例。
例如:如果你的弹簧容器中有一个id为“employee”的bean,那么每次你做一个
Employee emp = context.getBean("employee");
将返回一个新实例。
请求,会话和全局会话仅用于基于Web的应用程序
请求 为每个HTTP请求创建一个新实例。 例如:每次登录都需要不同的实例。
会话 将使用bean定义在单个HTTP会话的生命周期内为bean创建一个新实例。
全球 全局会话范围类似于标准HTTP会话范围,实际上仅在基于portlet的Web应用程序的上下文中有意义
您可以通过两种方式指定bean的范围