@Autowire 使用单例与原型

@Autowire using singleton vs prototype

看看下面的代码:

@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 行为?

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

关于您的第一个问题:将向 FacadeRemote 注入代理(例如,允许将已检查的异常 RemoteException 转换为未检查的异常)。根据 Spring 规范,此代理将是 FacadeRemote.

的远程接口的缓存实例