@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
.
的远程接口的缓存实例
看看下面的代码:
@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
.