Bean的自动装配,xml与注解

Bean的自动装配

  • 自动装配是Spring满足Bean依赖的一种方式!
  • Spring会在上下文中自动寻找,并自动给bean装配属性!

在Spring中有三种装配方式:

  • 在xml中显式的配置
  • 在Java中显式的配置
  • 在xml中隐式的配置

ByName自动装配

    <bean id="cat" class="com.psy.pojo.Cat"/>
    <bean id="dog" class="com.psy.pojo.Dog"/>
    <!--
        byName: 通过属性名自动装配,会在容器的上下文中查找和自己对象set方法后面的值对应的beanid
    -->
    <bean id="person" class="com.psy.pojo.People" autowire="byName">
        <property name="name" value="psy"/>
    </bean>

ByType自动装配(id可以不用写)

    <bean id="cat" class="com.psy.pojo.Cat"/>
    <bean id="dog" class="com.psy.pojo.Dog"/>
    <!--
        byType: 会自动在Spring容器中查找与属性类型相同的对象,如果找到了就赋值
    -->
    <bean id="person" class="com.psy.pojo.People" autowire="byType">
        <property name="name" value="psy"/>
    </bean>

小结:

  • byname的时候,需要保证所有的bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致!
  • bytype的时候,需要保证所有的bean的class唯一,并且这个bean需要和自动注入的属性类型一致!

使用注解实现自动装配

要使用注解须知:

  • 1、导入约束()
<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/context
       http://www.springframework.org/schema/context/spring-context.xsd">
  • 2、配置注解的支持

        <!--指定扫描指定目录下的包-->
        <context:component-scan base-package="com.psy.pojo"/>    
    <context:annotation-config/>
    

@Autowired(实体类中可以不需要set方法)

// 如果required属性为false,说明这个对象可以为空,否则的话不可以为空
@Autowired(required = false)

直接在属性(或者set方法)上使用即可
使用Autowired可以不用编写set方法。前提是自动装配的属性在IOC容器中存在,且符合名字(byname的规则)
与@Autowired经常搭配使用的是@Qualifier(value=“dog222”),就是说指定一个bean对象注入进去(多个dogxxx和多个dog对象的时候)

@Resource注解,java中的原生注解:相较于Autowired,Resource首先会先按照byname的方式进行匹配,如果没有会继续使用bytype的方式进行匹配,最后没有的话才会报错
Autowired首先会按照bytype进行查找

开发中最常用的是Autowired

Spring使用注解开发

在Spring4之后,要使用注解开发,必须保证aop包导入了
使用注解需要导入context约束,增加注解的支持!

@Component

使用此注解需要注意:

  • 配置文件写入配置注解的依赖

        <context:component-scan base-package="com.psy.pojo"/>
        <context:annotation-config/>
    

此注解的作用:(在实体类中该注解相当于在xml文件中配置了

package com.psy.pojo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @Component: 组件
 * 作用:用于把当前类对象存入spring容器中,等价于    <bean id="user" class="com.psy.pojo.User"/>,即不用在xml文件中配置bean
 */
@Component
public class User {
    /**
     * @Value: 简单类型的属性赋值(复杂的还是建议使用xml文件进行配置)
     *  等价于    <property name="name" value="psy"/>
     */
    @Value("zhangsan")
    private String name="psy";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

@Component衍生的注解:

或许在实体类中我们使用@Component,但是在web开发中,会按照MVC三层架构进行分层

  • dao 【@Repository】
  • service【@Service】
  • controller【@Controller】

这四个注解功能都一样,都是代表将某个类注册到Spring中,装配Bean

自动装配置:

@Autowired:自动装配,通过类型,名字
	唯一装配需要配合@Qualifier(value="xxx")使用
@Nullable:说明这个字段可以为null
@Resource:自动装配通过名字,类型

作用域:

将本实体类设置成原型模式

@Component
@Scope("prototype")
public class User {
    /**
     * @Value: 简单类型的属性赋值(复杂的还是建议使用xml文件进行配置)
     *  等价于    <property name="name" value="psy"/>
     */
    @Value("zhangsan")
    private String name="psy";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

小结:

xml与注解:

  • xml更加万能,适用于任何场景,维护更方便
  • 注解 不是自己的类使用不了,维护相对复杂

最佳使用:

  • xml用来管理bean
  • 注解只负责完成属性的注入
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值