spring中Bean的装配

来源:互联网 发布:朱日和阅兵知乎 编辑:程序博客网 时间:2024/05/18 19:40
1.Bean的声明。Bean有两种创建方式,一种是通过xml创建Bean,另一种是通过注解创建Bean。通过注解创建Bean是spring3之后新加入的特性。
     1.1 通过xml创建Bean
          <bean id="test" class="com.sun.Test"/>
          这是个最简单的bean,其中bean是spring的基本配置单元,通过bean可以创建一个对象。spring的核心是容器,每一个bean就是放在beans容器中。
          id是我们为这个bean指明一个索引,我们可以通过这个id查找bean。
          class标明我们创建bean的对象,即指明这是哪个类的bean。class里边是类路径。
     1.2 通过注解创建Bean
          @Component、@Controller、@Service、@Repository、以及使用@Component自定义的注解
2.Bean的作用域。bean默认是单例模式的,但是有时候我们希望每一次请求bean的时候都可以产生一个新的对象,而不是每一次都是相同的对象。我们可以通过修改bean的scope属性修改其作用域。
     2.1 singleton 单例模式,在spring容器中bean只可以被实例化一次
     2.2 prototype  原型模式,在spring容器中bean可以被实例化任意次
     2.3 request 在一次http请求中,每个bean对应一个实例。这个作用域仅在Web中才有用
     2.4 session 在一次http session请求中,每个bean对应一个实例。这个作用域仅在Web中才有用
     2.5 global-session 在一次http请求中,每个bean对应一个实例。这个作用域仅在protlet中才有用
3.Bean初始化和销毁。我们可以在一个Bean在实例化之前或在销毁之后执行指定动作。只需要在bean标签中配置<bean  init-method=""  destroy-method=""/>就可以指定要执行的方法。如果所有的额Bean有相同的初始化和销毁方法,我们可以在beans容器中设置默认的方法。<beans deafult-init-method=""  deafult-destroy-method="">
4.注入Bean属性。
     4.1 通过构造器注入属性。constructor-arg是通过构造器注入的标签,当后边跟value事说明构造函数中传的是一个基本类型,如果是ref,说明构造函数的参数是一个对象引用。在一个bean中有几个constructor-arg就说明构造函数需要几个参数
     <bean id="" class="">
          <constructor-arg value=""/>
          <constructor-arg ref=""/>
     </>
     4.2 通过setter方法注入属性。property是通过setter方法注入参数的标签。我们在类中定义一个变量,通过给这个变量设置getter和setter方法。在传参的时候我们就可以使用property来传参。name的值是类中变量的名字,value则是我们要向这个变量赋的值,如果是ref,说明这个变量是一个对象。
   <bean id="" class="">
        <property name="" value=""/>
        <property name="" ref=""/>
   </>
     4.3 在类中引用一个对象时,我们可以使用setter方法注入,也可以使用内部bean的方法注入对象。标红部分就是内部bean的使用。name指明引用变量的名称,里边的bean指明对象的类路径。
   <bean id="" class="">
        <property name="" value=""/>
        <property name="">
          <bean class=""/>
        </>
   </>
     4.4 使用spring的命名空间p装配属性。在使用命名空间p的时候我们要在beans中进行相应的设置即在beans标签中加入   xmlns:p="http://www.springframework.org/schema/p"  然后我们就可以使用  p:  作为bean的左右属性的前缀来装配bean。比如在一个类中有age和school两个属性。其中school是一个对象。我们可以用一下的方式写。age="12"  age就标明要装配的属性,12则是装配的值。school-ref  中的ref则是指明这是一个引用。
     <bean id="" class="">
         p:age="12"
         p:school-ref="" 
     </>
     4.5 spring还提供了装配集合。包括<list>、<set>、<map>、<props>四种类型。当传递的参数是java.util.Collection的任意类型的时候就要使用list或set,如果参数是java.util.Map或java.util.Properties的时候就要使用map和pops。其中map和props都是键值对的形式,但是map允许键值对为任意形式,而props键和值都只可以是string类型的。
     4.6 使用表达式进行属性的装配。使用表达式我们可以装配只有在运行时候才可以知道的参数。表达式装配是使用spring的表达式语言(SpEL)来完成的。在配置的时候value中使用   #{}   这个标记会告诉编译器,这是spring的表达式。
     使用表达式进行装配可以装配字面值,能够引用bean,properties和方法,可以操作类,在操作类的时候  #{T().methodName()}  T()可以返回指定类的对象。还可以在表达式上执行计算,比较,应用正则等操作。
     4.7 自动检测bean
     spring自动装配的注解有@Autowired、@Inject、@Resource,如果想使用这几个注解需要在xml中进行声明
<context:annotation-config />添加这个注解之后就可以通过以上的注解装配Bean。