Spring学习Bean自动装配与注解开发

Posted yfyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring学习Bean自动装配与注解开发相关的知识,希望对你有一定的参考价值。

七、Bean的自动装配

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

在Spring中有三种自动装配方式

  1. 在xml中显示配置
  2. 在Java中显示配置
  3. 隐式的自动装配【重要】

7.1 测试

环境搭建:一个人两个宠物

7.2 ByName自动装配

<!--
        ByName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid
    -->
<bean id="people" class="cn.imut.pojo.People" autowire="byName">
    <property name="name" value="张磊"/>
</bean>

7.3 ByType自动装配

byType:会自动在容器上下文中查找,和自己对象属性相同的对应的beanid
<bean id="people" class="cn.imut.pojo.People" autowire="byType">
    <property name="name" value="张磊"/>
</bean>

小结:

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

7.4 注解实现自动装配

The introduction of annotation-based configuration raised the question of whether this approach is “better” than XML.

要使用注解须知:

  1. 导入约束:context

    <context:annotation-config/>
  2. 配置注解的支持

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>

</beans>

@Autowired:

直接在属性上使用即可,也可以在set方式上使用

可以不用写set方法,前提是在IOC容器中存在,且符合ByType

如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解完成时

@Nullable: 字段标记此注解,字段可以为null

使用@Qualifier配合使用

@Qualifier(value = "dog1")      

@Resource

java自带注解,没有Spring方便

小结

@Resource和@Autowired的区别:

  • 都是用来自动装配,都可以放在属性字段上
  • @Autowired 通过ByType的方式实现,必须要求对象存在,否则空指针
  • @Resource默认通过ByName实现,若找不到名字,则通过ByType找
  • 执行顺序不同:@Autowired 通过byType的方式实现。@Resource默认通过byname的方式实现

八、使用注解开发

在Spring4之后,要使用注解开发,必须要保证aop的包导入了技术图片

使用注解需要导入context约束,增加注解的支持

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>

</beans>
  1. bean

  2. 属性如何注入

    @Data
    @Component
    // @Component 组件
    public class User {
    
        //相当于bean中的注入
        @Value("张磊")
        public String name;
    }
  3. 衍生的注解

    @Component有几个衍生注解,我们在Web开发中,会按照MVC三层架构分层

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

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

  4. 自动装配

    @Autowired:自动装配,通过类型
    @Qualifier:配合使用,可以具体指定
    @Nullable: 字段标记此注解,字段可以为null
    @Resource:自动装配
  5. 作用域

    @Data
    @Component
    // @Component 组件
    @Scope("singleton") //单例
    public class User {
    
        //相当于bean中的注入
        @Value("张磊")
        public String name;
    }
  6. 小结

    xml与注解:
    • xml更加万能,适用于任何场合!维护简单方便
    • 注解 不是自己的类使用不了,维护相对复杂
    最佳实践:
    • xml用来管理bean
    • 注解只负责完成属性的注入

以上是关于Spring学习Bean自动装配与注解开发的主要内容,如果未能解决你的问题,请参考以下文章

Spring学习bean装配详解之 通过注解装配 Bean基础配置方式

spring框架学习:Bean的装配方式 ——基于注解的装配自动装配

Spring学习-----Spring使用@Autowired注解自动装配

Spring5Bean 的自动装配及注解开发

Spring---ioc自动装配和使用注解

Spring学习系列 通过Java代码装配Bean