Spring2-Spring IoC容器和bean

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文件中同样不用的形式,而是使用标签,ref属性同样指向其它标签的name属性:

      
      
          
          
          
      
      
    

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

  
          
          

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

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

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

Bean

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


就是一个Bean.

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

Spring2-Spring IoC容器和bean_第1张图片

你可能感兴趣的:(Spring2-Spring IoC容器和bean)