1

私はこのようなDaoの実装を持っています

public class EntityDao<T> {

    private Class clazz;
    private SessionFactory sessFactory;

    public EntityDao(Class clazz, SessionFactory sessFactory) {
        this.clazz = clazz;
        this.sessFactory = sessFactory;

    }
.... dao methods 
}

特定のdaoを取得して保存するためのファクトリ

EntityBeanDaoFactory {

private HashMap<EntityDaoType, EntityDao> daoMap = new HashMap<EntityDaoType, EntityDao>();
// return dao from daoMap if exists a if not create it and put it in the map then return dao
public EntityDao createDao(EntityDaoType entityType)  {
 switch (entityType) {
        case mySpecialDaoTYPE:
            if (!daoMap.containsKey(entityType)) {
                    EntityDao<Type> mySpecialDao = new EntityDao(Type.class, sessFactory);
                    daoMap.put(entityType, mySpecialDao);
                }
                 return daoMap.get(entityType);
}

}

今、私は @PreAuthorize("hasPermission()") で dao メソッドに注釈を付けたいと思っていますが、Spring はこの方法で作成された daos を認識しておらず、プロジェクト全体を一度にリファクタリングすることができないため、dao を作成しました。 aplicationContectxt.xml 内で注釈を使用する

<bean id="mySpecialDao" class="..EntityDao" >
    <constructor-arg>
        <value>myClass</value> 
    </constructor-arg>
    <constructor-arg ref="sessionFactory" />
</bean>

工場内では、この特定のdaoをこのように作成するための動作が変更されています

     if (!daoMap.containsKey(entityType)) {
         EntityDao<Class> dao = (EntityDao<Class>) AppContext.getApplicationContext().getBean("mySpecialDao");
                daoMap.put(entityType, dao);
            }

春に私のDAOを認識させるより良い方法はありますか?つまり、手動で作成されたインスタンスをSpringに認識させる方法はありますか?

4

2 に答える 2

1

これは、AspectJ を使用した Spring AOP サポートを使用して行うことができます。詳細はこちら: http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/aop.html#aop-atconfigurable

これを有効にすると、Spring は Configurable アノテーションでアノテーションが付けられたクラスで作成されたインスタンスを認識します。その後、Spring は PreAuthorize アノテーションを認識できるようになります。

于 2013-05-28T09:06:23.493 に答える
0

DAO を作成するためにファクトリが必要なのはなぜですか? それが Spring アプリケーション コンテキストです。

ロール ベースのセキュリティを使用して DAO メソッドを呼び出す機能を制限したいようです。それは問題なく、可能だと思いますが、DAO の作成を制限する必要はありません。Spring を使用して作成し、アクセスを制限します。あなたのやり方はやり過ぎで不必要です。

于 2013-05-27T14:08:15.697 に答える