• 自动装配Bean


    Spring提供了几种技巧,可以减少XML的配置数量:

    • 自动装配(autowiring):可以减少<property>(setter注入)<constructor-arg>(构造器注入)元素,让Spring自动识别如何装配Bean的依赖关系;
    • 自动检测(autodiscovery):Spring能够自动识别哪些类需要被装配成Spring Bean,从而减少对<bean>的使用

    4种自动装配

    1. byName:——根据Property的Name自动装配,如果一个bean的name,和另一个bean中的Property的name相同,则自动装配这个bean到Property中。
    2. byType:——根据Property的数据类型(Type)自动装配,如果一个bean的数据类型,兼容另一个bean中Property的数据类型,则自动装配。
    3. constructor:——根据构造函数参数的数据类型,进行byType模式的自动装配。
    4. autodetect: ——先尝试使用constructor,失败后再使用byType。

    1.1、byName:

    (1)Car.java

    public class Car {  
        public void start(){  
            System.out.println("starting car...");  
        }  
    }

    (2)User.java——此处是setter注入

    public class User {  
        private Car car;  
          
        public void setCar(Car car) {  
            this.car = car;  
        }  
      
        public void startCar(){  
            car.start();  
        }  
    }  

    (3)xml配置文件:

    原来是xml显式装配

    <?xml version="1.0" encoding="UTF-8"?>  
    <beans xmlns="http://www.springframework.org/schema/beans"  
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
           xsi:schemaLocation="http://www.springframework.org/schema/beans   
               http://www.springframework.org/schema/beans/spring-beans.xsd">  
                 
           <bean id="car" class="com.zzj.bean.Car"></bean>  
           <bean id="user" class="com.zzj.bean.User" >
                <property name="car" ref="car" />
           </bean>  
    </beans> 

    xml中自动装配后:

    <?xml version="1.0" encoding="UTF-8"?>  
    <beans xmlns="http://www.springframework.org/schema/beans"  
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
           xsi:schemaLocation="http://www.springframework.org/schema/beans   
               http://www.springframework.org/schema/beans/spring-beans.xsd">  
                 
           <bean id="car" class="com.zzj.bean.Car"></bean>  
           <bean id="user" class="com.zzj.bean.User" autowire="byName"></bean>  
    </beans> 

    (4)测试

    public static void main(String[] args) {  
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  
            User user = (User) context.getBean("user");  
            user.startCar();  
        } 

    1.2、@Autowired注解实现自动装配(byType)

    修改User.java文件和XML配置文件就行了。


    (1)User.java

    import org.springframework.beans.factory.annotation.Autowired;  
      
    public class User {  
        @Autowired  
        private Car car;  
      
        public void startCar(){  
            car.start();  
        }  
    }

    注:此时setter方法可以省掉

    (2)XML配置文件

    <?xml version="1.0" encoding="UTF-8"?>  
    <beans xmlns="http://www.springframework.org/schema/beans"  
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
           xmlns:context="http://www.springframework.org/schema/context"  
           xsi:schemaLocation="http://www.springframework.org/schema/beans   
               http://www.springframework.org/schema/beans/spring-beans.xsd  
               http://www.springframework.org/schema/context   
             http://www.springframework.org/schema/context/spring-context.xsd">  
                 
           <bean id="car" class="com.zzj.bean.Car"></bean>  
           <bean id="user" class="com.zzj.bean.User"></bean>  
           <context:annotation-config/>  //开启自动注解
    </beans>

    注:@Autowired(byType)是spring自带的注解,也可以使用Java原生的注解:@Resource(byName)。推荐使用@Resource,更具移植性

    由于@Autowired是byType类型,可能会匹配多个Bean,那么哪个才是需要的呢

    这时配合限定器@Qualifier("具体Bean的名字")就可以指定匹配的Bean了

    @Autowired和@Resource区别:

    http://bbs.csdn.net/topics/390175654

  • 相关阅读:
    java 中的Debug eclipse 开发工具使用
    google 浏览器的Debug 调试工具使用
    java 实现word 转 pdf
    你好啊 未来的自己
    java 实现在线阅读 .pdf
    java 的在线下载文件 .pdf
    Java 实现手机发送短信验证码
    Java 实现发送邮件
    Java 实现邮件的发送
    沃尔沃投资两家以色列科技创企 布局人工智能
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/6203427.html
Copyright © 2020-2023  润新知