知识大全 Spring的自动装配

Posted 属性

篇首语:厌伴老儒烹瓠叶,强随举子踏槐花。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Spring的自动装配相关的知识,希望对你有一定的参考价值。

Spring的自动装配  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  采用构造函数注入 以及setter方法注入都需要写大量的XML配置文件 这时可以采用另一种方式 就是自动装 由Spring来给我们自动装配我们的Bean

  Spring提供了四种自动装配类型

   :ByName 采用这种方式时给属性自动注入值时 会根据Bean里的setXXX中的XXX去搜寻有没有id=XXX的Bean 有的话 将其自动注入 没有的话 就表示setXXX里要装入属性没有装配值

   :ByType 采用这种方式给属性自动注入值时 会根据Bean里的setXXX中的参数类型来搜寻配置文件中的Bean定义 如果发现了一个 就自动将其注入 否则如果有 个这个属性没有被装配 如果有多个 则会抛出异常

   :constructor 这种方式的注入与ByType其实没什么区别 无非是将ByType移入到了构造函数中 这种方式下 构造函数是自动注入的 在构造对象时 会自动根据构造函数的参数类型搜寻Bean 如果有一个合适的 则成功 一个没有 则失败 有多个 则会抛出异常

   :autodetect 自动检测方式 会采用如下流程 先按照constructor方式 再按照ByType方式

  例子源代码如下

  例子一个Java工程师从一个网站上买东本

  一个普通的JavaBean

  [java]

  interface Engineer

  Object buyApple();

  

  public class JavaEngineer implements Engineer

  private String name;

  private Website ws;

  public JavaEngineer(String name)

  this name=name;

  

  public void setWebsite(Website ws)

  this ws=ws;

  

  @Override

  public String toString()

  // TODO Auto generated method stub

  return super toString();

  

  public Object buyApple()

  System out print( 工程师 +name);

  return ws buyApple();

  

  

  interface Engineer

  Object buyApple();

  

  public class JavaEngineer implements Engineer

  private String name;

  private Website ws;

  public JavaEngineer(String name)

  this name=name;

  

  public void setWebsite(Website ws)

  this ws=ws;

  

  @Override

  public String toString()

  // TODO Auto generated method stub

  return super toString();

  

  public Object buyApple()

  System out print( 工程师 +name);

  return ws buyApple();

  

  

  这个网站假设是淘宝网

  [java]

  interface Website

  Object buyApple();

  

  public class TaobaoWebsite implements Website

  public TaobaoWebsite()

  

  

  public Object buyApple()

  

  System out println( 购买了一个苹果 );

  return new Object();

  

  

  interface Website

  Object buyApple();

  

  public class TaobaoWebsite implements Website

  public TaobaoWebsite()

  

  

  public Object buyApple()

  

  System out println( 购买了一个苹果 );

  return new Object();

  

  则采用自动装配的ByName方式 的配置文件如下

  [java]

  <?xml version= encoding= UTF ?>

  <beans

  xmlns= /schema/beans

  xmlns:xsi= / /XMLSchema instance

  xmlns:p= /schema/p

  xsi:schemaLocation= /schema/beans /schema/beans/spring beans xsd >

  <! 这个名字要和setXXX中的XXX保持一致 不区分大小写 >

  <bean id= website class= pp TaobaoWebsite />

  <bean id= engineer class= pp JavaEngineer autowire= byName >

  <constructor arg value= ppTest />

  <! 这里有一个属性采用的是自动byName的方式注入的 >

  </bean>

  </beans>

  <?xml version= encoding= UTF ?>

  <beans

  xmlns= /schema/beans

  xmlns:xsi= / /XMLSchema instance

  xmlns:p= /schema/p

  xsi:schemaLocation= /schema/beans /schema/beans/spring beans xsd >

  <! 这个名字要和setXXX中的XXX保持一致 不区分大小写 >

  <bean id= website class= pp TaobaoWebsite />

  <bean id= engineer class= pp JavaEngineer autowire= byName >

  <constructor arg value= ppTest />

  <! 这里有一个属性采用的是自动byName的方式注入的 >

  </bean>

  </beans>打印结果如下

  [java]

  工程师ppTest购买了一个苹果

  工程师ppTest购买了一个苹果

  有了第一个结果后 第二个结果也就很简单了

  ByType的测试

  修改配置文件如下

  []

  <! 这个名字 不再需要和setXXX中的XXX保持一致 >

  <bean id= web class= pp TaobaoWebsite />

  <bean id= engineer class= pp JavaEngineer autowire= byType >

  <constructor arg value= ppTest />

  <! 这里有一个属性采用的是自动byName的方式注入的 >

  </bean>

  <! 这个名字 不再需要和setXXX中的XXX保持一致 >

  <bean id= web class= pp TaobaoWebsite />

  <bean id= engineer class= pp JavaEngineer autowire= byType >

  <constructor arg value= ppTest />

  <! 这里有一个属性采用的是自动byName的方式注入的 >

  </bean>其他的地方可以不用修改

  Constructor自动装配 为了测试 给JavaEngineer加入一个构造函数 如下方式

  [java]

  public JavaEngineer(Website ws)

  this ws=ws;

  this name= ppTest ;

  

  public JavaEngineer(Website ws)

  this ws=ws;

  this name= ppTest ;

  

  再修改配置文件如下

  []

  <bean id= web class= pp TaobaoWebsite />

  <bean id= engineer class= pp JavaEngineer autowire= constructor >

  <! <constructor arg value= ppTest /> >

  <! 这里有一个属性采用的是自动byName的方式注入的 >

  </bean>

  <bean id= web class= pp TaobaoWebsite />

  <bean id= engineer class= pp JavaEngineer autowire= constructor >

  <! <constructor arg value= ppTest /> >

  <! 这里有一个属性采用的是自动byName的方式注入的 >

  </bean>结果是一样的

cha138/Article/program/Java/ky/201311/28710

相关参考

知识大全 Spring自动代理机制

Spring自动代理机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们一直使用ProxyF

知识大全 Spring与自动调度任务

Spring与自动调度任务  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近把以前设想做搜索引

知识大全 spring aop中单独代理和自动代理的设置

  spring的aop机制提供两类方式实现类代理一种是单个代理一种是自动代理  单个代理通过ProxyFactoryBean来实现自动代理通过BeanNameAutoProxyCreator或者De

知识大全 spring 2.0 的事务自动处理

  <aop:config>       <!<aop:advisorid=userManagerTxad

知识大全 Spring Autowire(自动装载)的一次实践

SpringAutowire(自动装载)的一次实践  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Spring Autowire(自动装载)的一次实践[2]

SpringAutowire(自动装载)的一次实践[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 Spring Autowire(自动装载)的一次实践[1]

SpringAutowire(自动装载)的一次实践[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 Spring3 Mybatis3 freemarker 自动生成对应表

Spring3Mybatis3freemarker自动生成对应表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

生物膜是怎样合成的?可能的机理是什么?

关于膜的合成,曾提出两个模型:一个自装配模型(spontaneousself-assembly),即膜是理由蛋白、脂和糖自动组装的,但与体外实验结果不符。因为用纯化的脂和蛋白在体外装配时总是形成脂质体

IF装配与MF、MT装配相比的特点

①IF装配的单体是纤维状蛋白(MF,MT的单体呈球形)。  ②反向平行的四聚体导致IF不具有极性。  ③IF在体外装配时不需要核苷酸或结合蛋白的辅助,在体内装配后,细胞中几乎不存在IF单体(但IF的存