2

まず第一に、私はSpringframworkにまったく慣れていません。

Spring-MVCにコントローラーがあるとしましょう:

@Controller
public class FooController {

    @Autowired
    private Foo foo;

    @Autowired
    private FooService fooService;

    @RequestMapping(value="/addfoo", method = RequestMethod.GET)
    public void addRequest(          
        @RequestParam(value="rq_param", required=true) String param){

        foo.setValue(param);    
        fooService.addFoo(foo);                     
    }
}

Fooをデータベースに追加する必要があります。しかし、値を設定する前に。これは、特定の要求が(他の場所から)着信したときに発生するはずです。

これが私のサービスです:

@Service
public class FooServiceImpl implements FooService {

    @Autowired
    private FooDAO fooDAO;

    @Transactional
    public void addFoo(Foo foo) {
        fooDAO.addFoo(foo);
    }
}

しかし、これは機能しません。私は得る

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'fooController': Injection of autowired dependencies failed;

IoCについての知識が不足しているため、基本的な間違いを犯したと確信しています...

ありがとう!

4

2 に答える 2

3

私はあなたがフーを注入するべきではないと思います。インターフェイスベースのサービスやコントローラーではなく、モデルオブジェクトのように見えます。

Springの制御外で、リクエストが届いたときにnewを使用して作成する必要があります。リクエストパラメータの値を新しいFooオブジェクトにバインドし、それを永続化する必要があります。

Springプロジェクトのすべてのオブジェクトは、Beanファクトリの管理下にある必要はありません。

通常、メソッドスコープ内のオブジェクトに対するnewの呼び出しが表示されます。これらは通常、インターフェイスを持たないPOJOモデルオブジェクトです。あなたのケースは私にはそれらの1つであるように思われます。

于 2012-04-26T11:30:40.350 に答える
0
 <context:component-scan base-package="service,controllers,dao"></context:component-scan>

dtdの後にservlet.xmlで編集します。

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

これはweb.xmlファイルにあります。

dao uの場合、アノテーション@Repositoryを追加する必要があります

私は間違っているかもしれません..しかし、これを試してみてください..

于 2012-04-27T06:09:13.357 に答える