2.Spring基本用法

来源:互联网 发布:linux中文输入法切换 编辑:程序博客网 时间:2024/06/17 05:01

  spring 中的xml配置相对于spring注解去注释,要早很多产生的,后期spring意识到,在大型的项目中越来越日益,庞大和臃肿,所以就产生了,注解的形式。

  1.bean的作用域:

       在spring容器中产生的bean,这个bean是有生命周期

      (1)singleton:单例模式,在springIOC中使用singleton来创建一个实例

      (2)prototype:原形模式,在每次getBean的时候都会产生一个新的Bean实例

      (3)request:对于每次Http请求,request定义的bean都会产生一个新的bean实例

      (4)session:对于每次HttpSession请求,使用session定义的bean都会产生一个新的bean实例 只有在web 中的spring 才会起到作用

       (5)global Session:使用全局的http session请求。

bean默认是的单例模式

 例如<bean id="xxx" class="test.xxx" scope="prototype"/> 原形模式创建的新的bean的实例

request和session则需要在web.xml配置监听或者filter,当http请求的时候在监听到或者过滤到

2.自动装配注入bean:

    (1)no:不自动装配

    (2)byName:根据属性名称来自动装配,beanFactory 查找容器中全部bean,找出其中的id与属性同名的Bean来完成注册

      例如:

              

<bean id="chinese"  class=“test.Chinese” autowire="byName"/>             <bean id="gundong" class="test.Gudong"   autowire="byName">                  <property name="name" value="wanwan"/>              </bean>

             在test.Chinese 这个类的java 代码中根据id名称和属性进行匹配

            

  public void setGundong(Dog dog){                 this.dog=dog;                }

    (3)byType:根据属性类型来自动装配,beanFactory 查找容器中全部bean,如果有匹配的这种类型的bean就会自动装配,如果有多个就会报异常。 

     例如:

            

  <bean id="chinese"  class=“test.Chinese” autowire="byType"/>             <bean id="gundong" class="test.Gudong"   autowire="byType">                  <property name="name" value="wanwan"/>              </bean>

             在test.Chinese 这个类的java 代码中根据传入的类型进行匹配

            

  public void setGundong(Dog dog){                 this.dog=dog;                }

    (4)constructor:与byType类似,只是不同的是通过构造器来进行装配,如果有多个就会报异常

    (5)autodetect:

3.bean的创建方式及依赖配置:

   (1)构造器创建bean:

        java代码中要创建一个默认构造器,当applicationContext进行spring容器的初始化的时候,相应的容器的中的所有的bean会调用代码中的默认的构造器,来创建对象,这个对象是单例的,然后再根据要文件注入的依赖关系,先实例化依赖bean,然后再依赖bean注入

   (2)静态工厂创建bean:

         例如:

           

   public interface Being {            //接口定义testBeing方法             public void testBeing();
</pre></p><pre name="code" class="java">    public class Cat implements Being {private String msg;public void setMsg(String msg) {this.msg = msg;}public void testBeing() {System.out.println(msg+"猫爱吃老鼠");}} }

public class Dog implements Being {private String msg;public void setMsg(String msg) {this.msg = msg;}public void testBeing() {System.out.println(msg+"狗爱肯骨头");}}
 

public class BeingFactory {public static Being getBeing(String arg){if (arg.equalsIgnoreCase("dog")) {return new Dog();}else {return new Cat();}}}


 //bean.xml中

      <bean id="dog" class="factory.BeingFactory" <strong>factory-method="getBeing"</strong>><constructor-arg value="dog"/><property name="msg" value="我是狗"/></bean> <bean id="cat" class="factory.BeingFactory" <strong>factory-method="getBeing"</strong>><constructor-arg value="cat"/><property name="msg" value="我是猫"/></bean> 

spring 容器通过反射来创建静态工厂的实例,然后调用静态的工厂的getBeing方法,然后利用构造器的注入传入一个值,然后就交给静态工厂来创建对象,然后再根据set注入值的方式,对静态工厂创建出来的对象进行set注入值

(3)实例工厂创建bean:


     
        <bean id="dog" class="factory.BeingFactory" factory-bean="personFctory"  factory-method="getPerson"><constructor-arg value="chin"/></bean> <bean id="cat" class="factory.BeingFactory" factory-bean="personFctory"   factory-method="getPerson"><constructor-arg value="ame"/></bean>         <bean id="personFactory" class="factory.personFactory"/>

</pre><p></p><pre>
spring实例工厂创建bean与静态工厂创建bean不同的地方就是实例工厂要创建一个bean然后再去引用这个实例工厂的bean,而静态工厂不用创建bean



0 0
原创粉丝点击