0

Spring3とHibernate4を使用しています

ManagedBean以外で以下を使用するにはどうすればよいですか?

@Inject 
EmployeeService employeeService 

または、DAOメソッドにアクセスする場合は、そのManagedBeanを次のように作成する必要があります。

@Named("mymanagedbean")
@ViewAccessScoped 

私にはいくつかConverterのクラスがあり、DAOサービスメソッドにアクセスするには、ManagedBeanではありませんがそれをManagedBeanとして使用する必要がありました。

DAOサービスメソッドを呼び出すための最良のアプローチは何ですか?

ありがとう

4

4 に答える 4

1

ApplicationContextAwareSpringインターフェースを実装してから、ApplicationContextを設定する必要があります。次に、Beanインスタンスを取得するための静的メソッドを提供する必要があります。

public class SpringApplicationContext implements ApplicationContextAware {

private static ApplicationContext CONTEXT;

public void setApplicationContext(ApplicationContext context)
        throws BeansException {
    CONTEXT = context;
}
    public static Object getBean(String beanName) { ...}
    public static <T> T getBean(Class<T> arg0) {...}

次に、管理されていないBeanで、引数として渡すか、Bean名を引数としてSpringApplicationContext.getBean渡すことでメソッドを呼び出すことができます。EmployeeService.class

于 2013-02-28T05:56:11.280 に答える
1

Converterクラスをクリーンに保ち、依存性を手動でプルするのではなく、依存性注入(クラスを簡単にテストできるようにするために強くお勧めします)を使用する場合は、Springの機能を使用して既存のオブジェクトを構成できます。アプリケーションコンテキストの外部で作成されます。こちらのSpringのリファレンスドキュメントの関連セクションを参照してください

于 2013-02-28T08:27:57.530 に答える
1

これが実際の例です(zagyiの答えに関連しています)。アプリケーションはSpringRooを使用するため、aspectjを使用します。

@FacesConverter("example.entity.converter")
@Configurable
public class EntityConverter implements Converter {

    @Resource
    MyDAO dao;

    @Override
    public Object getAsObject(FacesContext context, UIComponent component,
        String value) {

        Entity obj;

        try {
            obj = dao.getEntity(Long.valueOf(value));
        } catch( NumberFormatException e ) {
            throw new ConverterException( message );
        }
        return obj;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component,
         Object value) {

        Entity obj = (Entity) value;
        return (obj != null) ? obj.getId().toString() : "";
    }
}

ダオクラス

@Repository("myDAO")
public class MyDAOImpl implements MyDAO {
    ...
}
于 2013-04-21T12:50:22.453 に答える
0

私は、以下を使用Converterせずに、そして私が定義した実装を実装するクラスで、DAOメソッドを取得することができました@InjectEmployeeServiceInterface@Service(value="employeeService")

EmployeeService employeeService = 
(EmployeeService)facesContext.getApplication().getELResolver().
getValue(facesContext.getELContext(), null,
"employeeService");
于 2013-02-28T10:31:45.450 に答える