簡介
Spring的IOC功能,就是對象的執行個體化工作,由Spring容器完成.
Bean對象注意點
- 需要無參構造器;
- 預設情況下,生成的執行個體為單例;
- 在配置檔案中的
,其實就是執行個體.<Bean>
- -
Spring容器注入Bean對象.
1.最常用的方式.
- 對象是類建立出來的
<bean id="employeeDAO" class="dao.impl.EmployeeDAOImpl"/>
2.靜态工廠方法
- User對象是由工廠的方法creatUser()建立出來的:User user=工廠.creatUser();
- creatUser()方法中,是return new User();且是靜态方法
<bean id="user" class="工廠全限名" factory-method="creatUser" />
3.執行個體工廠方法
- User對象是由工廠的對象的方法creatUser()建立出來的:User user=工廠對象.creatUser();
-
- creatUser()方法中,是return new User();且是執行個體方法
<bean id="工廠" class="工廠全限名">
<bean id="user" class="User全限名" factory-bean="工廠Bean的id" factory-method="creatUser" />
4.實作Spring的接口FactoryBean <T>
<T>
在聲明Hibernate的SessionFactory的Bean時候,使用的類是LocalSessionFactoryBean,而不是Hibernate的的本身的工廠類
LocalSessionFactoryBean的實質内容(簡寫)
public class LocalSessionFactoryBean implements FactoryBean<SessionFactory>{
//實作方法 傳回sessionFactory對象
public SessionFactory getObject() {
return Configuration對象.buildSessionFactory(); //Hibernate架構就是這樣子擷取session工廠對象的.
}
//實作方法 傳回sessionFactory.class
public Class<?> getObjectType() {
return SessionFactory.class;
}
}
在Spring加載Bean的代碼
//判斷生成的bean對象是否繼承FactoryBean
if(oldBean instanof FactoryBean){
FactoryBean factory=(FactoryBean)Bean;//強轉類型
Object newBean=factory.getObject(); //擷取bean
}
好處:在LocalSessionFactoryBean 中重新加強的SessionFactory在Spring中的功能,可以有很多屬性可以在Spring的配置檔案中配置
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!-- 注入連接配接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- Hibernate的配置資訊 -->
<property name="hibernateProperties">
<value>
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.cache.use_second_level_cache=true
</value>
</property>
<!-- Hibernate的映射檔案位址 -->
<property name="mappingDirectoryLocations">
<list>
<value>classpath:domain</value>
</list>
</property>
</bean>
Spring容器注入Bean對象的注解.
不可用于靜态工廠,執行個體工廠.FactoryBean接口的方式
注解:(作用相同,将标簽下的類,存入Spring容器)
- @Component ——工具類,如AOP的通知類
- @Service———– 服務類
- @Repository——- dao類
- @Controller——– Action類
<!--聲明使用該注解,及掃描位置-->
<context:component-scan base-package="dao.impl"/>
@Repository("user") //注入進容器,且id=user
@Scope("propertype") //聲明作用域(Action類才會用)
public class User{
@PostConstruct //初始化方法
public void init() {
System.out.println("初始化");
}
@PreDestroy //銷毀方法
public void destroy() {
System.out.println("初始化");
}
}