自动装配

自动装配方式一:
@Autowired【Spring提供的方法】
《默认根据类型匹配》

 如:
        Controller -> Service ->Dao

        【三层组件】:
            通过@Autowired 从IOC容器中 根据类型自动注入【没有调用setXxx()方法】
                -如果@Autowired在属性前标注,则不调用setXxx(); 如果标注在setXxx()前面, 则会掉调用setXxx();
                -不能放在方法的参数前
            如:
            //service类中调用Dao层的类
            //StudentService类
                @Service("stuService")
                public class StudentService {

                    @Autowired //从IOC容器中,寻找一个 类型为StudentDao的Bean(根据类型)
                    private StudentDao studentDao;

                    //或 @Autowired
                    public void setStudentDao(StudentDao studentDao){
                        this.studentDao = studentDao;
                    }

                    public StudentDao getStudentDao() {
                        return studentDao;
                    }
                }

            //StudentDao类中
                @Repository("stuDao")
                public class StudentDao {
                }


        【实体类 即(是使用@Bean+返回值 形式)】:
            通过@Autowired 从IOC容器中 根据类型自动注入【没有调用setXxx()方法】
                -能放在方法的参数前、方法前。

            如:
            //为Studnet类型的bean的Address类型的属性注入值
            //MyConfig

                @Bean(value="stu") //id="stu"
                    //学生类bean
                    public Student myStudent(@Autowired Address address){
                        Student student = new Student(100,"zs",88);

                        student.setAddress(address);
                        return student;
                    }

                  @Bean
                    //地址类bean
                    public Address address(){
                        Address address = new Address("xa02","bj02");
                        return address;
                    }


        @Autowired使用时,默认时根据类型匹配:
            三层组件、Bean+返回值注入形式:
                1.如果IOC容器中有多个类型相同的bean,要匹配哪个?
                    会报错
                        a.可以使用id匹配注入
                        b.可以自己制定一个默认的bean,使用@Primary

                2.根据IOC容器中bean的名字(即id值)匹配?
                    @Qualifier("bean的id值") + @Autowired使用

                        /**三层组件:
                          *StudentService中:
                          */
                                //@Qualifier + @Autowired 组合使用:  根据@Qualifier后的名字"stuDao2"去IOC容器中查找(根据IOC容器中的bean的id值)
                                 @Qualifier("stuDao2")
                                 @Autowired
                                    private IStudentDao studentDao;

                          /**实体类bean:
                            *Myconfig中:
                            */
                                 @Bean(value="stu") //id="stu"
                                    public Student myStudent(@Autowired  @Qualifier("address2") Address address){
                                        Student student = new Student(100,"zs",88);

                                        student.setAddress(address);
                                        return student;
                                    }

                                    @Bean
                                    //地址类bean1
                                    public Address address(){
                                        Address address = new Address("xa01","bj01");
                                        return address;
                                    }

                                    //地址类bean2
                                    @Bean
                                    public Address address2(){
                                        Address address = new Address("xa02","bj02");
                                        return address;
                                    }




                3.如果有0个类型相同,默认会报错;但是可以修改成不注入(null): @Autowired(required=false)

自动装配方式二:
@Resource【JSR250提供】
《默认根据bean的id来装配》
(如果有名字,根据名字匹配;如果没有找到名字,再根据类型查找; 也可以通过name或type属性 指定根据名字或者类型找)

       1.只根据bean名字(id值)找:
            @Resource(name="bean的id值")

       2.只根据bean的类型找:
            @Resource(type=类名.class)

自动装配方式三:
@Inject【JSR330提供】
《默认根据类型匹配》

  需要额外导入javax.inject.jar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值