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
    • 注解只负责完成属性的注入

原文地址:https://www.cnblogs.com/yfyyy/p/12433401.html

时间: 2024-07-29 00:37:46

Spring学习四、Bean自动装配与注解开发的相关文章

Spring学习总结(2)-自动装配

上面说过,IOC的注入有两个地方需要提供依赖关系,一是类的定义中,二是在spring的配置中需要去描述.自动装配则把第二个取消了,即我们仅仅需要在类中提供依赖,继而把对象交给容器管理即可完成注入.在实际开发中,描述类之间的依赖关系通常是大篇幅的,如果使用自动装配则省去了很多配置,并且如果对象的依赖发生更新我们可以不需要去更新配置,但是也带来了一定的缺点. 说白了就是只需要声明bean,至于对象间的相互引用关系由Spring自己搞定.. 使用方式:no(不启用),byName(根据名称),byTy

Spring学习四----------Bean的配置之Bean的配置项及作用域

Bean的作用域(每个作用域都是在同一个Bean容器中) 1.singleton:单例,指一个Bean容器中只存在一份(默认) 2.prototype:每次请求(每次使用)创建新的实例,destory方式不生效 3.request:每次http请求创建一个实例且仅在当前request内生效(只能在web中使用) 4.session:同上,每次http请求创建一个实例,当前session内有效(只能在web中使用) 5.global session:基于portlet的web中有效(portlet

spring框架学习(四)自动装配

spring框架学习(四)自动装配 set注入和构造注入有时在做配置时比较麻烦.所以框架为了提高开发效率,提供自动装配功能,简化配置.Spring框架式默认不支持自动装配的,要想使用自动装配需要修改spring配置文件中<bean>标签的autowire属性 自动装配属性有6个值可选,分别代表不同的含义. 1,byName 从Spring环境中获取目标对象时,目标对象中的属性会根据名称在整个Spring环境中查找<bean>标签的id属性值.如果有相同的,那么获取这个对象,实现关联

spring实战之Bean的自动装配(非注解方式)

Bean的自动装配 自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bean的依赖关系. 1.1 自动装配Bean属性: Spring提供了四种各具特色的自动装配策略: 1.byName-把与Bean的属性具有相同名字的其他Bean自动装配到Bean的对应属性中.如果没有跟属性的名字相匹配的Bean,则该属性不进行装配. 2.byType-把与Bean的属性具有相同类型的其他Bea

Spring -- Bean自动装配&amp;Bean之间关系&amp;Bean的作用域

Bean的自动装配 Spring IOC 容器可以自动装配 Bean. 需要做的仅仅是在 的 autowire 属性里指定自动装配的模式 有以下几种自动装配的类型: byType(根据类型自动装配): 若 IOC 容器中有多个与目标 Bean 类型一致的 Bean. 在这种情况下, Spring 将无法判定哪个 Bean 最合适该属性, 所以不能执行自动装配. byName(根据名称自动装配): 必须将目标 Bean 的名称和属性名设置的完全相同. constructor(通过构造器自动装配):

Bean自动装配-XML最小化配置

上一个讲了怎样用xml配置所有的Bean以及进行依赖注入,但是这样太麻烦了,对于每一个bean都要写一个xml,可以有几种方式进行自动装配. 四种装配方式 byName(通过名字装配,这时属性的名字必须与bean名字一致) byType(通过类型,匹配与interface或class相同的类型),这种是找到对应的方法,然后进行setter方法进行注入的 constructor(也是通过类型匹配,但是是通过new的进行装配的) 最佳自动装配(先用constructor装配,然后再用byType)

Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)

转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——SpringMVC注解开发(基础篇) 本文主要内容: (1)SpringMVC校验 (2)数据回显 (3)异常处理器 (4)图片上传 (5)Json数据交互 (6)支持RESTful 1.SpringMVC校验 1.1校验理解 项目中,通常使用较多的是前端的校验,比如页面中js校验.对于安全要求较高的

XML 配置里的 Bean 自动装配

在XML文件中,先看一下下面的代码: <bean id="student" class="com.jeremy.spring.beans.student"> <property name="s_name" value="jeremy"></property> <property name="age" value="20"></prop

Spring4.0学习笔记(2) —— 自动装配

Spring IOC 容器可以自动装配Bean,需要做的是在<bean>的autowire属性里指定自动装配的模式 1)byType 根据类型自动装配,若IOC 容器中有多个目标Bean类型一致的Bean,Spring将无法判定哪个Bean最适合该属性,不能执行自动装配 2)byName 根据名称自动装配,必须将目标Bean名称和属性名设置的完全相同 配置方法: Address.java package com.spring.autowire; public class Address { p