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

简介

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

}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值