看看以下代码:
@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行为?
答案 0 :(得分:1)
@Autowired
和线程安全之间几乎没有关系。 Spring IoC的唯一责任是注入声明的依赖项,同时考虑它们的范围等。您有责任确保所有bean在多线程应用程序中都能正常工作。这意味着,例如,对于单例bean,所有声明该bean保持的状态都应该同步。
关于您的第一个问题:将向FacadeRemote
注入一个代理(例如,允许将已检查的异常RemoteException
转换为未经检查的异常)。根据这个代理中的Spring Spec,它将是FacadeRemote
的远程接口的缓存实例。