Java 基于spring xml的bean定义,`bean`元素的class属性
说:Java 基于spring xml的bean定义,`bean`元素的class属性,java,xml,spring,jpa,Java,Xml,Spring,Jpa,说: 那么如何解释这个案例呢 1) Springbean定义XMLclassattribute.XML: 3) 结果是: class $Proxy14 true false false 4) 我不认为classattribute.xml用静态工厂方法实例化beanentityManagerFactory,因为没有指定“”元素的工厂方法属性 5) 有人能解释一下吗?提前谢谢 你的豆子是 <bean id="entityManagerFactory" class="org.spr
那么如何解释这个案例呢 1) Springbean定义XML
classattribute.XML
:
3) 结果是:
class $Proxy14
true
false
false
4) 我不认为classattribute.xml
用静态工厂方法实例化beanentityManagerFactory
,因为没有指定“”元素的工厂方法
属性
5) 有人能解释一下吗?提前谢谢 你的豆子是
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
类型是a。这是春天的一种特殊类型
由BeanFactory中使用的对象实现的接口
他们自己就是工厂如果bean实现了这个接口,那么
用作对象公开的工厂,而不是直接用作bean
实例自身将被公开。
因此Spring使用一个具有您设置的属性的对象来生成一个EntityManagerFactory
对象,该对象以您提供的名称
作为bean公开。因此,您定义的bean实际上是EntityManagerFactory
类型,而不是LocalContainerEntityManagerFactoryBean
这将在文档中进一步讨论。如图所示,您可以获得LocalContainerEntityManagerFactoryBean
对象
当您需要向容器请求实际的FactoryBean
实例时
在bean的id前面加上
调用
ApplicationContext
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="minPoolSize" value="${connpool.minSize}"></property>
<property name="maxPoolSize" value="${connpool.maxSize}"></property>
</bean>
<!-- EntityManagerFactory -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="packagesToScan" value="${entity.package}"></property>
<property name="jpaProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<!-- other props -->
</props>
</property>
</bean>
import javax.persistence.EntityManagerFactory;
//...
private ApplicationContext ctx;
@Test
public void test(){
Object bean = ctx.getBean("entityManagerFactory");
System.out.println(bean.getClass());
System.out.println(bean instanceof EntityManagerFactory);
System.out.println(new LocalContainerEntityManagerFactoryBean() instanceof EntityManagerFactory);
System.out.println(new LocalContainerEntityManagerFactoryBean().getClass() == bean.getClass());
}
@Before
public void setUp() {
ctx = new ClassPathXmlApplicationContext("classattribute.xml");
}
class $Proxy14
true
false
false
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">