@Autowire使用singleton vs prototype

时间:2015-06-25 10:57:55

标签: spring web ejb autowired

看看以下代码:

@Controller
public class HomeController
{   
    @Autowired
    private FacadeRemote fr;

// code omitted   
}

|

@Component("user-details")
public class CustomUserServiceDetails implements UserDetailsService
{

    @Autowired
    private FacadeRemote fr;

    @Override
    public UserDetails loadUserByUsername(String email)
            throws UsernameNotFoundException
    {
        // omitted
    }

}

配置:

<!-- JNDI Properties -->
    <util:properties id="jndiProps">
        <beans:prop key="java.naming.factory.initial">org.jboss.naming.remote.client.InitialContextFactory</beans:prop>
        <beans:prop key="java.naming.factory.url.pkgs">org.jboss.ejb.client.naming</beans:prop>
        <beans:prop key="java.naming.provider.url">remote://127.0.0.1:4447</beans:prop>
        <beans:prop key="java.naming.client.ejb.context">true</beans:prop>
        <beans:prop key="boss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT">false</beans:prop>
    </util:properties>


    <!-- EJB look up -->
    <jee:remote-slsb id="ns" jndi-name="Layer//myejb!com.uni.ag.FacadeRemote"
        environment-ref="jndiProps" resource-ref="false"
        business-interface="com.uni.ag.FacadeRemote"
        lookup-home-on-startup="true">
    </jee:remote-slsb>

在以下示例中,@ Autowire如何工作:
这两个类是否使用相同的FacadeRemote实例? 一般来说,我如何学习与线程安全相关的@Autowire行为?

1 个答案:

答案 0 :(得分:1)

@Autowired和线程安全之间几乎没有关系。 Spring IoC的唯一责任是注入声明的依赖项,同时考虑它们的范围等。您有责任确保所有bean在多线程应用程序中都能正常工作。这意味着,例如,对于单例bean,所有声明该bean保持的状态都应该同步。

关于您的第一个问题:将向FacadeRemote注入一个代理(例如,允许将已检查的异常RemoteException转换为未经检查的异常)。根据这个代理中的Spring Spec,它将是FacadeRemote的远程接口的缓存实例。