Java绿地(~ming~)

Java 草地

常用链接

统计

最新评论

Spring的注入方式

Spring

一.Spring是一个轻量级的Ioc( DI )AOP的简化企业开发的容器框架


二.set注入方式



1.
属性注入:a. public class Message {private String title;private String content;  getter/setter…}

b.public interface Printer { public void startup(); public void print();}

  c. public class PrinterImpl implements Printer {  private Message message;

public void setMessage(Message message){ …}   //通过ser方法设置值

public void print() {System.out.println(message.getTitle());  }…….//需要值的存在

  d.属性注入:<bean id="message" class="assemble.Message">  //将控制交给容器注入

             <property name="title" value="china title"></property>

             <property name="content" value="control content"></property>  </bean>


e.
通过底层的BeanFactory创建和分发:

XmlBeanFactory factory =new XmlBeanFactory(new ClassPathResource(“mypck/xxx.xml”));

ClassName name=( ClassName) factory.getBean("className "); //get此时延时加载,功能有限



2
.引用其他类:<bean id="printer" class="assemble.PrinterImpl"

                init-method="startup" singleton="true" >   //容器参与了生命周期管理

               <property name="message" ref="message"></property>  </bean>

  singleton="true":默认对象可以复用,false是不会加载的,因为创建多个实例就不需要了

初始化的顺序:构造函数(没有就默认-àsetter-àinit-method



3.
内部类:<bean id="printer2" class="assemble.PrinterImpl"   init-method="startup">

     <property name="message">       <bean class="assemble.Message">

         <property name="title" value="china title2"></property>   </bean>

     </property>   </bean>



4
.装配集合:a.public class Foo {    private List list;    private String[ ] array;

     private Set set;   private Map map;  private Properties props; setter/getter }

  b. <property name="list">//value值的类型spring会自动区分

       <list>    <value>spring</value>  <ref bean="message"/> </list>   </property>

     <property name="array">  <list>      <value>ejb</value>   </list>  </property>



5.
装配set: <property name="set">       //set集合值是没有重复的

 <set>   <value>jave ee</value>    <value>.net</value>    </set>  </property>



6.
装配map: <property name="map">

      <map> <entry key="orm"><value>hibernate</value> </entry>  </map>  </property>



7.
装配properties: <property name="props">  //propskeyvalue都是string所以可以简写

       <props>  <prop key="mvc">struts</prop>    </props>    </property>



8.
装配null:<property name=”onename”> <null/> </property>

 

三.构造函数的注入方式:a. public class Address {   private String street; }

b.public class Person {   private String name; 

   private Address address;   private Integer age; public Person() {  }

public Person(String name, Address address) {

this.name = name;    this.address = address;  }

 c. <bean id="person" class="assemble.Person">

     <constructor-arg index="0" value="liming"></constructor-arg>

     <constructor-arg index="1">

       <bean class="assemble.Address">

         <property name="street" value="hefei"></property>    </bean>

     </constructor-arg>

     <property name="age" value="22"></property>   </bean> // 可混合使用

d:通过ApplicationContext进行查找   //预先注入方式

ApplicationContext ctx=new ClassPathXmlApplicationContext(“mypack/ClassName”);

ClassName name=( ClassName) ctx.getBean("className "); 

 


.自动装配方式:主要是byNamebyType, 其他如constructor较少

  1.a.如果存在: <bean id="message" class="assemble.Message">

     <property name="content" value="control content"></property>  </bean>

b.byName: <bean id="printer" class="assemble.PrinterImpl" >

                <property name="message" ref="message"></property>  </bean>

因为需要注入的属性名和存在的要引用bean的名称相同,所以可以用byName自动查找

<bean id="printer" class="assemble.PrinterImpl" autowire="byName"/>

   2.byType:在容器中寻找一个与需要自动装配的属性类型相同的bean,如果找到超过一个相符的bean就会抛出异常.

:如果配置文件中所有的bean的自动装配方式相同,可以在<beans>根节点声明以减少代码,如果在自动装配方式中再通过set方式注入,set方式会覆盖autowire.

 

:spring持久化支持:为整合如jdbc会抛出SQLException,Hibernate抛出HibernateException

1.springDateAccessException:a.与特定持久化技术和实现无关

  b.应用与持久层框架解藕      c.RuntimeException,不需要强制捕获  

posted on 2007-08-16 21:43 mrklmxy 阅读(2097) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: