servlet 3.0中的BeanPostProcessor模拟

时间:2017-09-04 06:13:52

标签: java servlets annotations

我对java Servlets和JSP有一点经验,但我使用的是Spring。在Spring中,我们有一个名为BeanPostProcessor的接口。我使用此接口实现来创建自定义注释。代码示例

public class InjectRandomIntAnnotationBeanPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization(Object bean, String string) throws BeansException {
        Field[] fields = bean.getClass().getDeclaredFields();
        for (Field field : fields) {
            InjectRandomInt annotation = field.getAnnotation(InjectRandomInt.class);
            if (annotation != null) {
                int min = annotation.min();
                int max = annotation.max();
                Random r = new Random();
                int i = min + r.nextInt(max - min);
                field.setAccessible(true);
                ReflectionUtils.setField(field, bean, i);
            }

        }
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object o, String string) throws BeansException {
        return o;
    }

}

当我开始使用servlet时,我提到了这个注释@WebServlet(urlPatterns = "/user/login") 问题是:在Servlet中是否有任何功能与Spring中的BeanPostProcessor类似,注释@WebServlet的注释在哪里?

实施例: 我的意思是Spring中的注释是用BeanPostProcessor注入的,用于检查注释@AutoWired是由AutoWiredAnnotationBeanPostProcessor类声明的,但注释@WebServlet被注入(或声明)

1 个答案:

答案 0 :(得分:0)

Servlet不受Spring容器管理。因此,它们的注释由它们运行的​​servlet api实现处理,即Tomcat。

根据您要实现的目标,您只需扩展HttpServlet并使用您的逻辑覆盖init method

如果您需要进行一些布线,您还可以利用SpringBeanAutowiringSupport。另见