Spring --Bean的自动装配

Bean的自动装配

在Spring框架里面是使用set方法和构造方法进行注入的,但是bean对象多了以后这样的注入工作就显得麻烦,还有就是xml文件也会变得很大很杂乱,所以为了简化xml配置文件,提高开发效率我们可以使用autowire(自动装配)

 

自动装配的优点:

自动装配可以大大地减少属性和构造器参数的指派。

自动装配也可以在解析对象时更新配置。

缺点:

重写的可能性:可以使用总是重写自动装配的constructor-argproperty设置来指定依赖关系。

原始数据类型:不能自动装配型。

混乱的本质:自动装配不如显示装配精确,所以如果可能的话尽可能使用显示装配

 

 

自动装配的几种方式

  1. byName按照属性名称自动装配

play.代码

public class Play {

   private User user;

   private String name;

   public void setUser(User user) {

      this.user = user;

   }

   public void setName(String name) {

      this.name = name;

   }

   public String getName() {

      return name;

   }

   public User getUser() {

      return user;

   }

   public void show()

   {

      user.play();

   }

}

Play的依赖文件user

      

public class User {

   public User() {

      System.out.println("create User");

   }

   public void play() {

      System.out.println("this User.play()");

   }

}

Test

public static void main(String[] args) {

      //

      ApplicationContext context=new ClassPathXmlApplicationContext("Beans.xml");

     

      Play play=(Play)context.getBean("play");

      play.show();

     

   }

Xml配置

<!-- 使用autowire byName 自动装配 -->

      <bean id="play" class="com.user.Play" autowire="byName">

         <property name="name" value="tom"></property>

      </bean>

      <bean id="user" class="com.user.User"></bean>

 

2.byType按属性类型自动装配

       代码playplay的依赖文件以及测试文件同上

       Xml代码

<!-- 使用autowire byType 自动装配 -->

      <bean id="play" class="com.user.Play" autowire="byType">

      <!-- 此处没有指定uservalue 此处spring会自动装配beans中一个属性相匹配的bean -->

      <!-- 正常的注入应该是<property name="user" ref="user"/> -->

      <!-- 使用自动装配就可以将这里的priperty省略 -->

         <property name="name" value="tom"></property>

      </bean>

      <bean id="user" class="com.user.User" ></bean>

  1. 由构造函数自动装配

Play

public class Play {

   private User user;

   private String name;

  

   public Play(User user, String name) {

      this.user = user;

      this.name = name;

   }

   public String getName() {

      return name;

   }

   public User getUser() {

      return user;

   }

   public void show()

   {

      user.play();

   }

 

Play依赖类不变

Xml配置 autowire设置成constructor

<bean id="play" class="com.user.Play" autowire="constructor" >

         <constructor-arg value="tom"></constructor-arg>

      </bean>

 

      <bean id="user" class="com.user.User" ></bean> 

 

猜你喜欢

转载自blog.csdn.net/u012777599/article/details/88410791