美文网首页
Spring2-Spring IoC容器和bean

Spring2-Spring IoC容器和bean

作者: 我相信你爱过gg | 来源:发表于2017-05-03 13:46 被阅读42次

Spring IoC容器和bean

Spring IoC容器

IoC也称为依赖注入(DI),可以帮我们创建对象 管理对象之间的依赖和管理对象的生命周期.
那么什么是依赖呢?
例如,在A类的方法中,实例化了B类的对象并调用其方法以完成特定功能,我们就说A类依赖于B类.

既然A类依赖于B类,那么Spring是怎么将B类注入进A类的呢?
Spring依赖注入有如下几种:

set注入

set注入也就是使用set方法进行注入,假设有一个SpringAction,类中需要实例化一个SpringDao对象,那么就可以定义一个privateSpringDao成员变量,然后创建SpringDaoset方法.

public class SpringAction {  
        //注入对象springDao  
        private SpringDao springDao;  
        //一定要写被注入对象的set方法  
        public void setSpringDao(SpringDao springDao) {  
             this.springDao = springDao;  
        }  
        public void ok(){  
             springDao.ok();  
        }  
}  

构造器注入

这种方式的注入是指带有参数的构造函数注入,看下面的例子,我创建了两个成员变量SpringDao和User,但是并未设置对象的set方法,所以就不能支持第一种注入方式,这里的注入方式是在SpringAction的构造函数中注入,也就是说在创建SpringAction对象时要将SpringDao和User两个参数值传进来:

public class SpringAction {  
    //注入对象springDao  
    private SpringDao springDao;  
    private User user;  
      
    public SpringAction(SpringDao springDao,User user){  
        this.springDao = springDao;  
        this.user = user;  
        System.out.println("构造方法调用springDao和user");  
    }  
          
    public void save(){  
        user.setName("卡卡");  
        springDao.save(user);  
    }  
}

在XML文件中同样不用<property>的形式,而是使用<constructor-arg>标签,ref属性同样指向其它<bean>标签的name属性:

    <!--配置bean,配置后该类由spring管理-->  
    <bean name="springAction" class="com.bless.springdemo.action.SpringAction">  
        <!--(2)创建构造器注入,如果主类有带参的构造方法则需添加此配置-->  
        <constructor-arg ref="springDao"></constructor-arg>  
        <constructor-arg ref="user"></constructor-arg>  
    </bean>  
    <bean name="springDao" class="com.bless.springdemo.dao.impl.SpringDaoImpl"></bean>  
    <bean name="user" class="com.bless.springdemo.vo.User"></bean>

解决构造方法参数的不确定性,你可能会遇到构造方法传入的两参数都是同类型的,为了分清哪个该赋对应值,则需要进行一些小处理:
下面是设置index,就是参数位置:

<bean name="springAction" class="com.bless.springdemo.action.SpringAction">  
        <constructor-arg index="0" ref="springDao"></constructor-arg>  
        <constructor-arg index="1" ref="user"></constructor-arg>  
</bean>

这里推荐一个非常好的文章,写的非常好非常详细.

<context:annotation-config/> 标签是啥?
它的作用是隐式的向Spring容器注册
AutowiredAnnotationBeanPostProcessor,
CommonAnnotationBeanPostProcessor,
PersistenceAnnotationBeanPostProcessor,
RequiredAnnotationBeanPostProcessor
这4个BeanPostProcessor.注册这4个bean处理器主要的作用是为了你的系统能够识别相应的注解.

这里有一篇文章可以很好的解释

Bean

Bean是啥?
我们将类放到Spring IoC容器中,让IoC帮我们管理,这些就称为Bean.
例如:

<bean name="springDao" class="com.bless.springdemo.dao.impl.SpringDaoImpl"></bean>

就是一个Bean.

Bean范围
Bean范围指的就是,Bean实例化的方式,单例还是多例.
singleton: 无论我们获取多少次都是获取的同一个对象.默认范围
prototype: 每次获取都会创建一个新的对象.
request: 在每次请求时会创建一个对象.
session: 每次会话的时候建立一个.

相关文章

网友评论

      本文标题:Spring2-Spring IoC容器和bean

      本文链接:https://www.haomeiwen.com/subject/lrjktxtx.html