您的位置:首页 > 编程语言 > Java开发

【Spring】【IOC】【Spring容器注入Bean对象的四种方式】【Spring中注入bean对象的注解】

2017-12-29 20:15 1411 查看

简介

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>

在声明Hibernate的SessionFactory的Bean时候,使用的类是LocalSessionFactoryBean,而不是Hibernate的的本身的工厂类

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"></bean>


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("初始化");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bean ioc spring
相关文章推荐