spring学习11:注解实现自动装配

spring学习11:注解实现自动装配

  • 注解实现自动装配:

    • JDK1.5支持的注解;

    • Spring从2.5开始就支持注解;

       

  • 要使用注解须知:

    • 1,导入约束;

       xmlns:context="http://www.springframework.org/schema/context"
    • 2,配置注解的支持【重要】

       <context:annotation-config/>
    • 3,样例:

      <?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方法上使用;

    • 使用@Autowired我们可以不用编写Set方法了,前提是你这个自动装配的属性在IOC(Spring)容器中存在且符合我们的名字规则(ByType);

    • 科普:

      @Nullable  字段标记了这个注解,说明这个字段可以为null;
      public @interface Autowired {
         boolean required() default true;
      }

       

    • 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
             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/>


         <bean id="cat" class="com.ljxdemo.pojo.Cat"/>

         <bean id="dog" class="com.ljxdemo.pojo.Dog"/>

         <bean id="person" class="com.ljxdemo.pojo.Person">
             <property name="name" value="张三"/>
         </bean>


      </beans>
    • pojo类添加注解: @Autowired


      public class Person {

         //如果显式的定义了Autowired的属性为false,说明这个对象可以为null,否则不能为空
         @Autowired
         @Qualifier(value = "cat11")
         private Cat cat;
         @Autowired
         @Qualifier(value = "dog33")
         private Dog dog;

         private String name;
      }
    • 如果@Autowired自动装配的环境比较复杂,当自动装配无法通过一个注解【@Autowired】完成的时候,我们可以使用@Qualifier(value = "dog33")去配合@Autowired的使用,指定一个唯一的bean对象注入;

       

       

    • @Resource注解:

      • @Resource也可以加参数:@Resource(name="cat11")

      public class Person {

         @Resource
         private Cat cat;
         @Resource(name="dog22")
         private Dog dog;
         
      }

       

  • 总结:

    • @Resource@Autowired的区别:

      • 相同点:都是用来自动装配的,都可以放在属性字段上;

      • 不同点:

        • @Autowired通过ByType的方式实现,而且必须要求这个对象存在;【常用】

        • @Resouce默认通过ByName的方式实现,如果找不到名字,则通过ByType实现;如果2个都找不到就报错;

        • 执行顺序不同:@Resouce是通过ByType的方式实现,@Resouce默认通过ByName的方式实现

       

 

 

 

 

posted @   gzs1024  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示