フィルタ春に@WebFilterと@Component注釈を追加する「myFilterを」私は、私は私のプロジェクトで作成したMyBeanClass
のオブジェクトが必要doFilter()
annotation.In @WebFilter
を経て登録されています。 new演算子でこのオブジェクトを作成し、tomcatでプロジェクトを実行すると、フィルタが一度登録されて正常に動作していることがわかります。私はMyFilter
クラス上@Component
注釈を追加することにより、オブジェクトをAutowire、その後、Tomcatでプロジェクトを実行しようとすると私はFilterクラスを持っている
しかし、私はフィルタが2回呼び出されtwice.The doFilter()
登録されていることを確認し、二度目doFilter()
ですMyBeanClass
というオブジェクトは初期化されておらず、null
です。したがって、NullPointerException
。私は春件まで依存性注入を残しておく必要がありますので、オブジェクトをオートワイヤリングするneeded.Theの関心事である
がある -
- フィルタが二回登録されているのはなぜ。
- なぜオブジェクトが2度目にヌルになるのですか?
- これを達成する正しい方法は何ですか。ここで
サンプルコードは次のとおりです。 MyFilter.java:
@Component
@WebFilter(filterName = "RestFilter", urlPatterns = { "/*" })
public class MyFilter implements Filter {
@Autowired
MyBeanClass myBeanClass;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//this is how I know that filter is registered twice.
System.out.println("this is init.");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
if (myBeanClass.isValidRequest()) {
System.out.println("Let this request pass");
chain.doFilter(request, response);
}
else{
System.out.println("Should not let pass this request");
}
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
MyBeanClass.java
@Component
public class MyBeanClass{
Boolean valid = false;
public boolean isValidRequest(){
//some code
}
//
//Other piece of code
//
}
私はSpringフレームワークに新しいですし、最近でプロジェクトに取り組んで開始しました春。私が何か悪いことをしているなら、私を修正してください。または、これを行う別の方法がある場合は、適切なリソースに私を指示します。
を動作しません。 ( '@ WebFilter'のため)。スプリングで登録された別のインスタンスがあります( '@ Component'のため)。いずれか一方を使用しますが、両方の注釈を使用しないでください。 –
クイック返信のためのM. Deinumに感謝します。 @WebFilterを介してフィルタを登録する必要があります。私が取り組んでいるプロジェクトではコンベンションに従っていますが、オートワイヤリングは達成されません。両方を達成する方法はありますか? – raviiii1
'@ WebFilter'として登録しないでください。また、自動配線を使わないでください。それが春管理されていない場合は、春は注射をしません、あなたは手動で物事を注入する必要があります。 –