Java 在没有xml配置的情况下重写LocalStatesessionProxyFactoryBean

Java 在没有xml配置的情况下重写LocalStatesessionProxyFactoryBean,java,spring,ejb-3.0,Java,Spring,Ejb 3.0,首先是问题,然后是解释:我想摆脱Beans XML配置,并向EJB上下文添加一些信息 我在我的项目(项目的web部分)中有一个名为无状态EJBSupportLocal的类,它扩展了LocalStatelessSessionProxyFactoryBean,以下是实现: public class StatelessEjbSupportLocal extends LocalStatelessSessionProxyFactoryBean { private UserInf

首先是问题,然后是解释:我想摆脱Beans XML配置,并向EJB上下文添加一些信息

我在我的项目(项目的web部分)中有一个名为
无状态EJBSupportLocal
的类,它扩展了
LocalStatelessSessionProxyFactoryBean
,以下是实现:

public class StatelessEjbSupportLocal 
        extends LocalStatelessSessionProxyFactoryBean {

    private UserInfo userInfo;

    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        FacesContext context = FacesContext.getCurrentInstance();
        Properties properties = new Properties();
        properties.put(Context.INITIAL_CONTEXT_FACTORY, 
             "org.jboss.security.jndi.JndiLoginInitialContextFactory");
        properties.put(Context.PROVIDER_URL, "jnp://localhost:1099/");
        properties.put(Context.SECURITY_PRINCIPAL, 
                userInfo.getLogin() + ";" + userInfo.getHost());
        properties.put(Context.SECURITY_CREDENTIALS, userInfo.getIdUser());
        super.setJndiEnvironment(properties);
        refreshHome();
    }
    public UserInfo getUserInfo() {
        return userInfo;
    }

    public void setUserInfo(UserInfo userInfo) {
        this.userInfo = userInfo;
    }
}
我在我的
apps.xml
上使用了bean配置:

(...)
<context:annotation-config/>
<context:component-scan base-package="my.package.controller" />

<bean id="someBusiness" class="my.package.StatelessEjbSupportLocal">
    <property name="jndiName" value="SomeBusinessImpl/local" />
    <property name="businessInterface" value="my.package.business.SomeBusiness" />
    <property name="userInfo" ref="userInfo" />
</bean>
(...)
我的托管bean上的
SomeBusiness
属性(用
@Autowired
注释)将正常工作

如果您需要更多信息,请告诉我,我将用它编辑此问题


提前谢谢。

这不好看,我不推荐。您应该使用
@Bean
带注释的方法来构造Bean,或者保留XML

如果您仍想继续此操作,请使用
@Component
注释您的
无状态ejbsupportlocal
类。用
@Autowired
注释它的
setUserInfo
,覆盖
setBusinessInterface
setJndiName
方法,用
@Value
注释它们,并调用它们的超级实现。比如说,

@Override
@Value("SomeBusinessImpl/local") // or reference some property
public void setJndiName(String jndiName) {
    super.setJndiName(jndiName);
}
然后在组件扫描中声明包含
无状态ejbsupportlocal
的包

按OP编辑:


正如Sotirios Delimanolis推荐的那样。我离开了XML配置。

我将按照您的建议进行XML配置。但是对于您的建议,我不太明白这一点:
public void setJndiName(String jndiName)
应该在哪里重写它?因为有了
@Value(“SomeBusinessImpl/local”)
它只适合这个特定的业务,那么我的应用程序上的其他一百个业务呢。这个问题我说得对吗?@JorgeCampos应该在
无状态ejbsupportlocal
类中重写它。(参见第二个答案)我必须有一个属性文件,而不是XML=\n我将使用XML配置来完成。明天当我开始工作并付诸实施时,我将接受你的建议。谢谢你的时间,我一定很感激。
<context:annotation-config/>
<context:component-scan base-package="my.package.controller" />
@Override
@Value("SomeBusinessImpl/local") // or reference some property
public void setJndiName(String jndiName) {
    super.setJndiName(jndiName);
}